لقد كنت خاملاً تمامًا مؤخرًا وأستغرق وقتًا لمراجعة بعض التطبيقات الفنية Java.
ليس لدي ما أفعله اليوم. استنادًا إلى بروتوكول UDP ، كتبت برنامج غرفة الدردشة البسيط للغاية.
في عملي الحالي ، نادراً ما يتم استخدام المقابس ، وهي أيضًا ذكرى بسيطة لبرمجة شبكة Java.
لنلقي نظرة على التأثير:
يمكن القول إن تأثير التنفيذ بسيط للغاية ، لكن لا يزال بإمكانك ببساطة رؤية مبدأ التنفيذ.
تجاذب مستخدمي "غرفة الدردشة 001" و Xiaohong و Xiaolu مع بعضهم البعض ببضع كلمات ، وتجاهل Xiaohei من "Room 002" وكان وحيدًا.
ألقِ نظرة على تنفيذ الكود:
1. أولاً وقبل كل شيء ، تنفيذ خادم الرسائل ، الوظيفة بسيطة للغاية:
• تسجيل معلومات العميل (أي غرفة الدردشة التي أدخلتها ، وما إلى ذلك) ؛
• بناء كائن مقبس بروتوكول UDP لقبول الرسائل التي يرسلها كل عميل ؛
• تحليل محتوى الرسالة ودفع معلومات الدردشة مرة أخرى إلى كل عميل في غرفة الدردشة المقابلة ؛
package com.tsr.simpleChat.receive_server ؛ import java.io.ioException ؛ import java.net.datagrampacket ؛ import java.net.datagramsocket ؛ import java.net.socketexception ؛ import java.util.ArayLister ؛ import java.util.hashmap ؛ com.tsr.simplechat.bean.messageentity ؛ استيراد com.tsr.simplechat.client.chatclient ؛ // خادم الدردشة الفئة العامة chatserver يمتد موضوع {// البرنامج يحتل رقم المنفذ الثابتة int int = 10000 ؛ // تقبل الرسالة كائن المقبس Socket STATIC STATIC STACTOCKET Server = NULL ؛ // كائن القاموس (المفتاح: معرف غرفة الدردشة ، القيمة: مجموعة مستخدمي العميل تحت غرفة الدردشة هذه) ؛ HashMap الثابت الخاص <string ، ArrayList <ThatClient>> Groups = New HashMap <String ، ArrayList <ThatClient> () ؛ // Constructor public chatserver () {try {// تقبل الرسالة تهيئة بنية خادم كائن المقبس = datagramsocket (المنفذ) الجديد ؛ } catch (socketException e) {e.printStackTrace () ؛ }} // قم بتسجيل مستخدم تسجيل دخول جديد في غرفة الدردشة العمومية الساكنة السطحية (String GroupID ، عميل ChatClient) {// احصل على جميع المستخدمين عبر الإنترنت لغرفة الدردشة من خلال غرفة الدردشة ArrayList <ThatClient> العملاء = groups.get (groupid) ؛ إذا (العملاء == null) {clients = new ArrayList <ThatClient> () ؛ } // قم بتسجيل المستخدمين الذين يدخلون غرفة الدردشة هذه المرة. // تحديث مجموعة معلومات غرفة الدردشة (GroupId ، عملاء) ؛ }. }} private void ensivemessage () {// udp packet byte [] buf = new byte [1024] ؛ حزمة datagrampacket = datagrampacket جديد (buf ، buf.length) ؛ بينما (صحيح) {try {// قبول packet server.receive (packet) ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ } // تحليل حزمة البيانات والحصول على محتوى سلسلة معلومات الدردشة = سلسلة جديدة (packet.getData () ، 0 ، packet.getLength ()) ؛ // parse json data من خلال حزمة الجهات الخارجية gson gson = new gson () ؛ messageentity me = gson.fromson (المحتوى ، messageentity.class) ؛ // تحليل محتوى الرسالة والحصول على جميع المستخدمين عبر الإنترنت لغرفة الدردشة من خلال معرف غرفة الدردشة ArrayList <ThatClient> العملاء = groups.get (me.getGroupId ()) ؛ // ادفع الرسالة المستلمة مرة أخرى إلى كل مستخدم لغرفة الدردشة لـ (عميل ChatClient: العملاء) {client.pushbackMessage (ME) ؛ }}}}2. لا يزال برنامج العميل بسيطًا للغاية:
• تحديد واجهة غرفة دردشة العميل.
• بناء الرسالة إرسال كائن المقبس.
• احصل على محتوى مربع معلومات الدردشة وأرسله إلى الخادم.
حزمة com.tsr.simplechat.client ؛ استيراد java.awt.button ؛ استيراد java.awt.event ؛ استيراد java.awt.frame ؛ استيراد java.awt.textarea java.io.ioException ؛ استيراد java.net.datagrampacket ؛ استيراد java.net.datagramsocket ؛ استيراد java.net.inetaddress ؛ استيراد java.net.socketexception com.tsr.simplechat.receive_server.Chatserver ؛ // برنامج العميل الفئة العامة chatclient يمتد الإطار {private Static Final Long SerialVersionuid = 1L ؛ // معرف غرفة الدردشة مجموعة سلسلة خاصة ؛ // اسم مستخدم العميل الخاص بالسلسلة الخاصة ClientName ؛ // رسالة عميل إرسال مقبس الخدمة datagramsocket msg_send ؛ // PROTTER SERVICE PRIVATE Final Port = 10000 ؛ // عنوان IP Server خاص INETADDRESS IP ؛ // Client Control Textfield TF = New Textfield (20) ؛ Textarea ta = new textarea () ؛ زر إرسال = زر جديد ("إرسال") ؛ // Client Constructor public chatclient (String GroupId ، String clientName) {Super ("Rath Room:" + GroupId + "/" + ClientName) ؛ this.clientName = clientName ؛ this.groupid = groupId ؛ // قم بتعيين نمط واجهة العميل إضافة ("North" ، TF) ؛ إضافة ("المركز" ، تا) ؛ إضافة ("الجنوب" ، إرسال) ؛ setSize (250 ، 250) ؛ يعرض()؛ // تهيئة init () للخوادم المتعلقة بالدردشة ؛ // Monitor AddWIndOwListener (new WindowAdapter () {public void windowclosing (windowevent e) {// أغلق رسالة إرسال الرسائل msg_send.close () ؛ // أغلق برنامج العميل dispose () ؛ system.exit (0) ؛}}) ؛ } // تهيئة private void init () {// قم بتسجيل معلومات المستخدم الحالية وغرفة الدردشة إلى خادم chatserver.logingroup (groupid ، this) ؛ جرب {// تهيئة رسالة إرسال Socket MSG_SEND = جديد datagramsocket () ؛ // حدد خادم الرسائل Try {ip = inetaddress.getByName ("127.0.0.1") ؛ } catch (unknownhostexception e) {system.out.println ("unknownHostException ..") ؛ }} catch (SocketException e) {system.out.println ("استثناء اتصال المقبس ..") ؛ }} // إرسال رسالة الزر وقت الاستماع إلى الإجراء المنطقي العام (الحدث evt ، الكائن arg) {if (evt.target.equals (send)) {try {// الحصول على محتوى محتوى الإدخال = tf.getText () ؛ // إرسال رسالة send_message (content) ؛ // clear chat box tf.settext (null) ؛ } catch (استثناء ioe) {system.out.print (ioe.getMessage ()) ؛ }} إرجاع صحيح ؛ }. // تغليف الرسالة في udp packet byte [] buf = message.getBytes () ؛ حزمة datagrampacket = datagrampacket جديد (buf ، buf.length ، IP ، المنفذ) ؛ حاول {// إرسال رسالة msg_send.send (packet) ؛ } catch (ioException e) {system.out.println ("io issection ..") ؛ }} // تنسيق الرسائل messageformatmatformath (content) {StringBuffer Buffer = new StringBuffer () ؛ buffer.append ("{/" groupid/":"). append ("/" "). append (groupId) .Append ("/"،") ؛ buffer.append ("/" username/":/"). إلحاق (clientName) .append ("/" ، ") ؛ buffer.append ("/"text/":/"). append (content) .Append ("/"}") ؛ إرجاع buffer.toString () ؛ } // احصل على آخر الأخبار عن غرفة الدردشة الحالية من الخادم (رد الاتصال ..) public void papterbackMessage (messageentity me) {ta.append (me.getusername () + ":" + me.gettext ()) ؛ ta.append ("/n") ؛ }} 3. فئة كيان الرسائل <br /> يتم استخدامها بشكل أساسي لتغليف الرسائل في كائنات ، بما في ذلك: معرف غرفة الدردشة ، ومستعرة مرسل الرسائل ، ومحتوى الرسائل. استخدام تنسيق JSON للحالة.
Package com.tsr.simplechat.bean ؛ // Message Entity class public messageentity {private String GroupId ؛ اسم المستخدم الخاص بالسلسلة الخاصة ؛ نص سلسلة خاصة ؛ السلسلة العامة getGroupId () {return GroupId ؛ } public void setGroupId (String GroupId) {this.groupid = groupId ؛ } السلسلة العامة getUserName () {return username ؛ } public void setusername (string username) {this.userName = username ؛ } السلسلة العامة getText () {return text ؛ } public void setText (string text) {this.text = text ؛ }}4. حسنًا ، يتم ذلك بشكل أساسي هنا ، وإنشاء فئة اختبار.
• قم بتشغيل خادم الرسائل.
• افتح ثلاثة عملاء ، اثنان منهم يدخلون "غرفة الدردشة 001" والآخر يدخل "غرفة الدردشة 002".
استيراد com.tsr.simplechat.client.Chatclient ؛ استيراد com.tsr.simpleChat.Receive_Server.Chatserver ؛ اختبار الفئة العامة {public static void main (string [] args) {chatserver r = new chatserver () ؛ R.Start () ؛ ChatClient C1 = New ChatClient ("001" ، "Little Red") ؛ ChatClient C2 = New ChatClient ("001" ، "Little Green") ؛ ChatClient C3 = New ChatClient ("002" ، "Little Black") ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.