في الماضي ، كتبت برنامج دردشة وأرسلت علامة إلى الخادم مباشرة مع سلاسل ، ثم قمت بإعادة توجيهها.
الآن أطلب مني إرسال الكائن مباشرة مع تدفق الكائن ، واختباره ، وتسجيله.
في الواقع ، أنا أكثر ميلًا إلى إرسال أشياء مع JSON.
الوظائف الرئيسية: يرسل العميل كائن إلى الخادم ، ويستقبله الخادم. الطريقة الأخرى هي نفسها تقريبًا ، لذلك لن أكتبها.
ما سبق هو العمارة العامة.
فئة المستخدم هي سمتين.
نسخ رمز رمز على النحو التالي:
حزمة com.qiantu.bean ؛
استيراد java.io.serializable ؛
مستخدم الفئة العامة ينفذ قابلة للتسلسل {
خاص ثابت نهائي طويل المسبانيويد = 1L ؛
اسم السلسلة الخاصة ؛
كلمة مرور السلسلة الخاصة ؛
السلسلة العامة getName () {
اسم العودة
}
public void setName (اسم السلسلة) {
this.name = name ؛
}
السلسلة العامة getPassword () {
إرجاع كلمة المرور ؛
}
public void setPassword (سلسلة كلمة مرور) {{
this.password = كلمة المرور ؛
}
}
جانب الخادم: كائن المستخدم الذي أرسله العميل:
نسخ رمز رمز على النحو التالي:
اختبار الحزمة
استيراد java.io.buffredinputStream ؛
استيراد java.io.ioException ؛
استيراد java.io.objectinputStream ؛
استيراد java.net.serversocket ؛
استيراد java.net.socket ؛
استيراد com.qiantu.bean.user ؛
الفئة العامة TestServer {
public void start () {
يحاول {
Serversocket SS = Serversocket (7777) ؛
System.out.println ("ابدأ قبول ...") ؛
مقبس المقبس = ss.accept () ؛
// إنشاء دفق الإدخال
ObjectStream OIS = New ObjectInputStream (
جديد bufferedInputStream (Socket.getInputStream ())) ؛
Object obj = ois.ReadObject () ؛
if (obj! = null) {
مستخدم المستخدم = (المستخدم) OBJ ؛
System.out.println ("user:" + user.getName ()) ؛
System.out.println ("كلمة المرور:" + user.getPassword ()) ؛
}
ois.close () ؛
socket.close () ؛
Ss.Close () ؛
} catch (ioException e) {{
E.PrintStackTrace () ؛
} catch (classnotfoundException e) {{
E.PrintStackTrace () ؛
}
}
الفراغ الثابت العام الرئيسي (سلسلة [] args) {{
اختبار جديد ().
}
}
العميل: أرسل كائن مستخدم إلى الخادم:
نسخ رمز رمز على النحو التالي:
عميل الحزمة ؛
استيراد java.io.ioException ؛
استيراد java.io.objectputStream ؛
استيراد java.net.socket ؛
استيراد java.net.unknownhostexception ؛
استيراد com.qiantu.bean.user ؛
الفئة العامة testclient {
الفراغ الثابت العام الرئيسي (سلسلة [] args) {{
اختبار جديد ().
}
public void start () {
يحاول {
Socket Socket = مقبس جديد ("127.0.0.1" ، 7777) ؛
// إنشاء دفق الإدخال
ObjectPutStream OOS = جديد ObjectPutStream (المقبس
.getputStream ()) ؛
مستخدم المستخدم = مستخدم جديد () ؛
user.setName ("Liang Guoqiao") ؛
user.setPassword ("123456") ؛
// أدخل الكائن ، تأكد من Flush ()
OOS.WriteObject (المستخدم) ؛
ooos.flush () ؛
oos.close () ؛
socket.close () ؛
} catch (unknownhostexception e) {{
E.PrintStackTrace () ؛
} catch (ioException e) {{
E.PrintStackTrace () ؛
}
}
}
نتائج التشغيل:
انتبه إلى:
يجب أن تنفذ الطبقة المادية "1" ، وإضافة خدمة التعريف.
تدفق () بعد "2" يرسل الكائن ؛
"3" أكثر أهمية.
الفئة الفعلية على جانبي الخادم هي نفسها تمامًا. لقد كنت أفعل الاسم لفترة طويلة. جوهر جوهر جوهر