لقد بدأت مؤخرًا مشروعًا حيث توجد حاجة لاتصالات الويب عبر الإنترنت. لم أكتب رمزًا لفترة طويلة وأنا غير معتاد عليه. لذلك كتبت أولاً عرضًا تجريبيًا ومارسه وشاركته على منصة شبكة Wulin لإجراء سجل حتى يمكن استخدامه مع الجميع.
اسمحوا لي أولاً أن أخبرك بخطوات التنفيذ:
1. استخدم مكون AWT والمقبس لتنفيذ عميل واحد بسيط لإرسال الرسائل باستمرار إلى الخادم ؛
2. مع مؤشرات الترابط ، أدرك اتصالًا متعدد العميل للخادم لإرسال الرسائل ؛
3. قم بتنفيذ رسائل عميل إعادة توجيه الخادم إلى جميع العملاء وعرضها على العميل في نفس الوقت ؛
4. قم بتغيير واجهة النافذة التي تم إنشاؤها بواسطة مكون AWT إلى الواجهة التي يتم عرضها بواسطة JSP الأمامي أو HTML ، وقم بتغيير العميل الذي تم تنفيذه بواسطة Socket Java إلى تطبيق التكنولوجيا الأمامية.
هنا ننفذ الوظيفة البسيطة للخطوة الأولى ، الصعوبة هي:
1. لم أستخدم مكون AWT مطلقًا ولم أستخدم أحداث الاستماع المتعلقة بـ Java أبدًا ؛
2. لم أستخدم مآخذ لفترات طويلة من الوقت للتفاعل بين العميل والخادم ، ولم أقم بتطوير بنية CSS حقًا.
الرمز لتنفيذ الوظيفة هو كما يلي:
عميل:
حزمة الدردشة. استيراد java.awt.borderlayout ؛ استيراد java.awt.frame ؛ استيراد java.awt.textarea ؛ استيراد java.awt.textfield ؛ استيراد java.awt.event.actionevent ؛ استيراد java.awt.event.actionListener ؛ استيراد java.awt.event.windowadapter ؛ استيراد java.awt.event.windowevent ؛ استيراد java.io.dataOutputStream ؛ استيراد java.io.ioException ؛ استيراد java.net.socket ؛ استيراد java.net.unknownhostexception ؛ / ** * عميل الدردشة عبر الإنترنت 1. قم بإنشاء مخطط واجهة النافذة الرسومية 2. أضف حدثًا قريبًا إلى المخطط العائد 3. أضف منطقة إدخال ومنطقة عرض محتوى إلى المخطط التفصيلي 4. أضف حدث إرجاع النقل لمنطقة الإدخال * 5. قم بإنشاء اتصال خادم وإرسال البيانات * * @Auuthor tuzongxun123 */ public class chat يمتد { // منطقة عرض المحتوى textarea taste = new textarea () ؛ مقبس المقبس الخاص = فارغ ؛ // دفق إخراج البيانات DataOutputStream DataOutputStream = NULL ؛ public static void main (string [] args) {new ChatClient (). launcframe () ؛ } / ** * إنشاء نافذة رسومية بسيطة * * Author: tuzongxun * title: launcframe * param * return void * date 18 مايو ، 2016 9:57:00 am * throws * / public void launcframe () {setLocation (300 ، 200) ؛ this.setsize (200 ، 400) ؛ إضافة (tftxt ، borderlayout.south) ؛ إضافة (Tarea ، BorderLayout.north) ؛ علية()؛ . tftxt.addActionListener (new tflister ()) ؛ setVisible (صحيح) ؛ يتصل()؛ } / ** * الاتصال بالخادم * * Author: Tuzongxun * title: connect * param * @return * date 18 مايو ، 2016 9:56:49 AM * @throws * / public void connect () {try {// إنشاء sentike connective setock = 127.0.0.0.1 ، 8888) ؛ // احصل على دفق إخراج العميل dataOutputStream = جديد dataoutputStream (socket.getOutputStream ()) ؛ System.out.println ("الاتصال بالخادم") ؛ } catch (unknownHostException e) {E.PrintStackTrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} / ** * أغلق موارد العميل * * Author: Tuzongxun * title: disconnect * @param * return void * date 18 مايو ، 2016 9:57:46 AM * throws * / public void disonnect () {try {dataoutputstream.close.close () ؛ socket.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} / ** * أرسل رسالة إلى الخادم * * Author: Tuzongxun * title: sendMessage * paramparam text * @return void * @date 18 ، 2016 9:57:56 am * athrows * / private void sendMessage (telect string) {try {dataoutputstream.writeutf (text) ؛ DataOutputStream.flush () ؛ } catch (ioException e1) {e1.printStackTrace () ؛ }} / ** * منطقة إدخال نافذة الرسومات للاستماع إلى حدث إرجاع النقل * * Author tuzongxun123 * * / private class tflister تنفذ ActionListener {Override public void actionperformed (actionevent e) {String text = tftxt.getText (). trim () ؛ safy.settext (text) ؛ tftxt.settext ("") ؛ // إرسال البيانات إلى الخادم sendMessage (نص) ؛ }}}الخادم:
حزمة الدردشة. استيراد java.io.datainputStream ؛ استيراد java.io.eofexception ؛ استيراد java.io.ioException ؛ استيراد java.net.bindexception ؛ استيراد java.net.serversocket ؛ استيراد java.net.socket ؛ /*** تستخدم Java مكونات Socket و AWT لتنفيذ وظيفة الدردشة عبر الإنترنت ببساطة. يمكن للخادم إدراك الخادم لإرسال الرسائل باستمرار إلى الخادم بعد توصيل عميل واحد* ولكن لا يدعم العديد من العملاء للاتصال في نفس الوقت. والسبب هو أنه بعد الحصول على اتصال العميل في الكود ، سيستمر في الاستماع إلى مدخلات العميل محاطية ، مما يسبب انسدادًا* حتى لا يتمكن الخادم من الاستماع إلى عميل آخر مرتين. إذا كنت ترغب في تنفيذها ، فأنت بحاجة إلى استخدام Tuzongxun123 * *//// فئة عامة {public static void main (string [] args) {// ما إذا كان الخادم قد بدأ بنجاح boolean isStart = false ؛ // Server Socket Serversocket SS = NULL ؛ // مقبس المقبس العميل = فارغ ؛ . حاول {// ابدأ Server SS = New ServersOcket (8888) ؛ } catch (bindException e) {system.out.println ("المنفذ قيد الاستخدام بالفعل") ؛ // أغلق نظام البرنامج. Exit (0) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } حاول {isStart = true ؛ بينما (isStart) {boolean isConnect = false ؛ // ابدأ مقبس الاستماع = ss.accept () ؛ System.out.println ("Connect Connect") ؛ iSconnect = صحيح ؛ بينما (isConnect) {// احصل على دفق إدخال العميل datainputStream = جديد datainputStream (socket.getInputStream ()) ؛ // اقرأ البيانات التي تم تمريرها بواسطة رسالة سلسلة العميل = datainputstream.readutf () ؛ System.out.println ("يقول العميل:" + رسالة) ؛ }}} catch (eofexception e) {system.out.println ("client leable!") ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {// أغلق المورد ذي الصلة ، حاول {datainputStream.close () ؛ socket.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}}}ما ورد أعلاه هو المعرفة ذات الصلة حول مقبس Java لتنفيذ وظيفة دردشة بسيطة عبر الإنترنت (I) التي أدخلها المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!