تصف هذه المقالة تنفيذ غرفة الدردشة المقبس استنادًا إلى بروتوكول TCP في برمجة Java. شاركه للرجوع إليه ، على النحو التالي:
هنا ، يتم استخدام مآخذ التوصيل للبرمجة ، والتي تنجز اتصالًا مزدوجًا بين الخادم والعميل استنادًا إلى خدمة TCP الموثوقة.
جانب خادم الخادم:
package com.han ؛ import java.awt.container ؛ استيراد java.awt.event.actionevent ؛ استيراد java.awt.event.actionlistener ؛ import java.awt.event.windowadapter ؛ import java.awt.awt.windowevent ؛ import java.io.*؛ javax.swing.jscrollpane ؛ استيراد javax.swing.jtextarea ؛ استيراد javax.swing.jtextfield ؛/*** هذا البرنامج ينفذ جزء برمجة الخادم من برنامج TCP. * يتم إجراء البرمجة باستخدام مآخذ التوصيل لتحقيق اتصال مزدوج مع العميل استنادًا إلى خدمة TCP الموثوقة. * راجع عميل فئة العميل في هذه الحزمة للبرمجة * Author Han * */ @CumpressWarnings ("Serial") يمتد خادم الفئة العامة jdialog {private bufferreader reader ؛ كاتب printwriter الخاص خادم Serversocket الخاص ؛ مقبس المقبس الخاص ؛ private JTextarea ta = new Jtextarea () ؛ Private JScrollPane sp = new JScrollpane (TA) ؛ Private JTextField TF = New JTextField () ؛ حاوية CC ؛ الخادم العام (عنوان السلسلة) {setTitle (title) ؛ AddWIndOwListener (new WindowAdapter () {public void windowclosing (windowevent we) {dispose () ؛ // refbe all الموارد ذات الصلة المتعلقة بنظام الحوار. cc = getContentPane () ؛ setLayout (NULL) ؛ ta.setlinewrap (صواب) ؛ ta.setedable (false) ؛ SP.SetBounds (0،0،300،342) ؛ TF.SetBounds (0،342،300،25) ؛ cc.add (sp) ؛ cc.add (tf) ؛ tf.addActionListener (new ActionListener () {public void actionperformed (Actionevent e) {try {constr = new printWriter (socket.getOutputStream () ، true) ؛} catch (IoException e1) {// todo auto catch block e1.printstacktrace () ؛ ta.append ("user1:"+tf.getText ()+'/n') ؛ } void getServer () {try {server = new ServersOcket (8998) ؛ ta.append ("تم إنشاء مقبس الخادم بنجاح/n") ؛ بينما (صحيح) {ta.append ("في انتظار اتصال العميل/n") ؛ Socket = server.accept () ؛ ta.append ("Client Connection/n") ؛ reader = جديد bufferedReader (new inputStreamReader (socket.getInputStream ())) ؛ getClientMessage () ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ }} private void getClientMessage () {try {while (true) {string news = reader.ReadLine () ؛ if (news! = null) {ta.append ("user2:"+news+"/n") ؛ } else {ta.append ("user2 (client) disconnected/n") ؛ استراحة؛ }}} catch (ioException e) {// todo catch catch e.printstacktrace () ؛ } حاول {if (reader! = null) {reader.close () ؛ }} catch (ioException e) {// todo catch catch e.printstacktrace () ؛ } if (socket! = null) {try {socket.close () ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ }}} public static void main (string [] args) {server user1 = new server ("user1") ؛ user1.setBounds (0،0،300،400) ؛ user1.setResible (false) ؛ user1.setVisible (true) ؛ user1.getServer () ؛ }}عميل العميل:
حزمة com.han ؛ استيراد java.awt.*؛ استيراد java.awt.event.*؛ استيراد java.io. * يتم إجراء البرمجة باستخدام مآخذ التوصيل لتحقيق اتصال مزدوج مع الخادم استنادًا إلى خدمة TCP الموثوقة. * راجع فئة الخادم في هذه الحزمة لبرمجة الخادم * يمكن تشغيله على منصات مختلفة وآلات مختلفة ، ولكن يجب تعديل عنوان IP المكتوب في الرمز على عنوان IP الخاص بالجهاز الذي يقوم بتشغيل خادم برنامج الخادم. * Author Han * */ @CumpressWarnings ("Serial") عميل الطبقة العامة يمتد JDialog {Private Bufferreader Reader ؛ كاتب printwriter الخاص مقبس المقبس الخاص ؛ private JTextarea ta = new Jtextarea () ؛ Private JScrollPane sp = new JScrollpane (TA) ؛ Private JTextField TF = New JTextField () ؛ حاوية CC ؛ العميل العام (عنوان السلسلة) {setTitle (title) ؛ AddWIndOwListener (new WindowAdapter () {public void windowclosing (windowevent we) {dispose () ؛ // refbe all الموارد ذات الصلة المتعلقة بنظام الحوار. cc = getContentPane () ؛ setLayout (NULL) ؛ ta.setlinewrap (صواب) ؛ ta.setedable (false) ؛ SP.SetBounds (0،0،300،342) ؛ TF.SetBounds (0،342،300،25) ؛ cc.add (sp) ؛ cc.add (tf) ؛ tf.addActionListener (new ActionListener () {public void actionperformed (actionevent e) {constr.println (tf.getText ()) ؛ ta.append ("user2:"+tf.getText ()+'/n') ؛ } private void connect () {ta.append ("حاول الاتصال/n") ؛ Try {Socket = New Socket ("192.168.1.3" ، 8998) ؛ } catch (unknownhostexception e) {// todo catch catch e.printstacktrace () ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ } try {constr = new printWriter (socket.getOutputStream () ، true) ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ } ta.append ("أكمل الاتصال/n") ؛ } private void getClientMessage () {try {reader = new bufferedReader (new inputStreamReader (socket.getInputStream ())) ؛ بينما (صواب) {string news = reader.ReadLine () ؛ if (news! = null) {ta.append ("user1:"+news+"/n") ؛ } آخر {ta.append ("user1 (server) تم فصله ، وعندما يتم إعادة توصيل الخادم ، أعد تشغيل user2 (client) للاتصال/n") ؛ استراحة؛ }}} catch (ioException e) {// todo catch block ta.append ("user1 (server) للاتصال/n") ؛ E.PrintStackTrace () ؛ } حاول {if (reader! = null) {reader.close () ؛ }} catch (ioException e) {// todo catch catch e.printstacktrace () ؛ } if (socket! = null) {try {socket.close () ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ }}} public static void main (string [] args) {client user2 = new client ("user2") ؛ user2.setBounds (0،0،300،400) ؛ user2.SetVisible (صحيح) ؛ user2.setResible (false) ؛ user2.connect () ؛ user2.getClientMessage () ؛ }}لمزيد من المعلومات حول المحتوى المتعلق بـ Java ، يرجى مراجعة موضوعات هذا الموقع: "ملخص لمهارات برمجة مقبس Java" ، "ملخص ملفات Java ومهارات تشغيل الدليل" ، "ملخص لمهارات تشغيل بيانات Java" ، "ملخص مهارات تشغيل Java DOM"
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.