استخدم تقنية المقبس لتنفيذ غرفة الدردشة عبر الإنترنت ووظائف الدردشة الخاصة ، والمحتوى المحدد كما يلي
بدون مزيد من اللغط ، دعنا نحصل على الصورة:
1. صفحة دردشة مجموعة غرفة الدردشة
قائمة جهات الاتصال للمستخدمين عبر الإنترنت
صفحة اتصال المقبس
صفحة الدردشة الخاصة
مقدمة المشروع
قم بتنفيذ اتصال المقبس مع الخادم: عندما يتصل كل عميل بالخادم ، سيقوم الخادم بحفظ كل مأخذ توصيل متصل في مجموعة القائمة.
وظيفة الدردشة الجماعية: عندما يرسل المستخدم رسالة دردشة جماعية إلى الخادم ، يقوم الخادم بإعادة توجيه جميع المعلومات إلى جميع العملاء المتصلين في القائمة.
وظيفة الدردشة الخاصة: بعد أن يرسل المستخدم معلومات الدردشة الخاصة إلى الخادم ، سيرسل الخادم رسالة إلى IP الهدف.
عرض قائمة جهات الاتصال عبر الإنترنت: عندما يقوم مستخدم جديد بتسجيل الدخول بنجاح ، سيرسل الخادم معلومات الاتصال عبر الإنترنت إلى العميل في شكل سلسلة JSON ، ويحصل العميل على معلومات الاتصال عبر الإنترنت عن طريق تحليل سلسلة JSON.
تخصيص Socketevent فئة قوية: يتواصل العميل مع الخادم ويحفظ البيانات من خلال هذه الفئة ، ثم استخدم أداة FastJson لتحويل كائن الفئة إلى سلسلة JSON لإرسالها.
الفئة العامة socketevent {private int type = 0 ؛ سلسلة خاصة msg = "" ؛ سلسلة خاصة keyip = "" ؛ // مفتاح IP سلسلة خاصة مؤقتة = "" ؛ // المؤقتة IP Public Socketevent () {} public int gettype () {return type ؛ } public void setType (int type) {this.type = type ؛ } السلسلة العامة getMsg () {return msg ؛ } public void setMsg (String msg) {this.msg = msg ؛ } السلسلة العامة getKeyip () {return keyip ؛ } public void setKeyip (string keyip) {this.keyip = keyip ؛ } السلسلة العامة getTporaryip () {return reporaryip ؛ } public void settemporaryip (سلسلة مؤقتة) {this.temporaryip = مؤقت ؛ }}النوع: قم بتوقيع نوع المعلومات التي يتم إرسالها حاليًا. يتم استخدام بيانات تحليل الخادم والعميل لتحديد نوع الرسالة التي تنتمي إليها.
الثابت العام النهائي int chat_private = 111 ؛ // تعليمات للدردشة الخاصة الثابتة الثابتة int chat_group = 222 ؛ // تعليمات للمجموعة الدردشة العامة الثابتة int socket_success = 333 ؛ // تعليمات لاتصال المقبس الناجح الثابتة العامة int socket_fail = 444 ؛ // تعليمات للاتصال المقبس الفاشل العام الثابتة int connect_success = 666 ؛ // تعليمات لاتصال المقبس الناجح الثابتة النهائية int connect_fail = 777 ؛ // فشل الأمر في التوصيل المقبس الفاعل العام الثابت في النهاية int login_arg = 888 ؛ // يتلقى المقبس الأمر للتوقيع على تسجيل الدخول إلى نهائي User static Final int cancel_arg الجديد = 999 ؛ . . . // أمر إرسال رسائل الدردشة الخاصة الثابتة العامة int send_iplist = 6666 ؛ // تعليمات لإرسال مجموعة IP للمستخدم المسجلة
keyip: عنوان IP لبادئ رسالة العميل
درجة الحرارة: عنوان IP مؤقت. إذا كان نوعًا هو نوع دردشة خاص ، فإن هذا IP يمثل عنوان IP لجهة الاتصال الهدف.
Serversocket
1. استلم اتصال العميل
Socket SocketClient = server.accept () ؛
2. قم بتشغيل الموضوع لتلقي المعلومات من العميل في الوقت الفعلي
// احصل على البيانات المرسلة من قبل العميل في الوقت الحقيقي Override public void run () {try {when (true) {if ((accessline = in.readline ())! = null) {system.out.println ("<الرسالة المستلمة>" + قبول) ؛ حدث Socketevent = json.parseObject (قبول LINE ، socketevent.class) ؛ Switch (event.gettype ()) {case utilfactory.chat_group: sendmsgavoid (event.getKeyip () ، acceptline) ؛ استراحة؛ CASE UTILFACTORY.SEND_PRIVAL: EVENT.SETTYPE (UTILFACTORY.CHAT_PRIVAL) ؛ sendmsgtarget (event.getTporaryip () ، json.tojsonstring (event)) ؛ استراحة؛ }}}} catch (استثناء e) {E.PrintStackTrace () ؛ }}
3. طرق إرسال الرسائل إلى IPs المحددة وأساليب إرسال الرسائل إلى جميع عناوين IP الأخرى باستثناء IPS الخاص بك.
// أرسل رسالة إلى عنوان IP المحدد void sendmsgtarget (String Targetip ، String msg) {int num = mlist.size () ؛ لـ (int index = 0 ؛ index <num ؛ index ++) {socket msocket = mlist.get (index) ؛ string ip = msocket.getInetAddress (). gethostaddress () ؛ if (ip.equals (targetip)) {printWriter pout = null ؛ جرب {pout = new printWriter (new BufferedWriter (new OutputStreamWriter (msocket.getOutputStream () ، "utf-8") ، true) ؛ pout.println (msg) ؛ // عودة طريقة الخروج ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}}}} // إرسال void private sendmsgaDoid (سلسلة تجنب ، سلسلة msstring) {int num = mlist.size () ؛ لـ (int index = 0 ؛ index <num ؛ index ++) {socket msocket = mlist.get (index) ؛ string ip = msocket.getInetAddress (). gethostaddress () ؛ if (! ip.equals (تجنب)) {printWriter pout = null ؛ جرب {pout = new printWriter (new BufferedWriter (new OutputStreamWriter (msocket.getOutputStream () ، "utf-8") ، true) ؛ pout.println (msString) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}}}يقبل العميل جميع المعلومات من الخادم في النشاط الرئيسي ، ويعيد التعرف وفقًا للنوع ، ويستخدم EventBus لإرسال المعلومات إلى كل جزء للعرض.
subscribe (threadmode = threadmode.main) public void privatechat (حدث socketevent) {switch (event.gettype ()) {case myapplication.chat_private: bean.setmsg (event.getmsg ()) ؛ Bean.setName (event.getKeyip ()) ؛ Bean.settype (chatmessageBean.others_arg) ؛ EventBus.getDefault (). post (Bean) ؛ استراحة؛ case myapplication.send_private: sendmsg (json.tojsonstring (event)) ؛ استراحة؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.