تصف هذه المقالة وظائف اتصال العميل والخادم التي تم تنفيذها بواسطة Java استنادًا إلى المقبس. شاركه للرجوع إليه ، على النحو التالي:
يشير الرمز التالي إلى مشروع دردشة MA Soldier. First Run chatserver.java لتنفيذ الاستماع للمنفذ ، ثم قم بتشغيل chatclient.java.
مثيل العميل
chatclient.java
Package SocketDemo ؛ import java.awt.*؛ import java.awt.event.*؛ import java.io.*؛ import java.net.*؛ chatclient public chatclient يمتد الإطار {socket s = null ؛ DataOutputStream dos = null ؛ DatainputStream dis = null ؛ bconnection bconnection = false ؛ Textfield tftxt = new TextField () ؛ textarea tacontent = new textarea () ؛ THELL TRECV = موضوع جديد (جديد RECVTHREAD ()) ؛ public static void main (string [] args) {new ChatClient (). LaunchFrame () ؛ } public void Launchframe () {setLocation (400 ، 300) ؛ this.setsize (300 ، 300) ؛ إضافة (tftxt ، borderlayout.south) ؛ إضافة (tacontent ، borderlayout.north) ؛ علية()؛ this.addwIndOwListener (new WindowAdapter () {Override public void windowsclosing (windowevent arg0) {disonnect () ؛ system.exit (0) ؛}}) ؛ tftxt.addActionListener (new tflistener ()) ؛ setVisible (صحيح) ؛ يتصل()؛ TRECV.START () ؛ } public void connect () {try {s = new Socket ("LocalHost" ، 8888) ؛ DOS = جديد dataOutputStream (S.GetOutputStream ()) ؛ dis = new DatainputStream (S.GetInputStream ()) ؛ System.out.println ("Connection!") ؛ bconnected = صحيح ؛ } catch (unknownHostException e) {E.PrintStackTrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} public void disconnect () {try {dos.close () ؛ dis.close () ؛ S.Close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } / * * try {bConnected = false ؛ trecv.join () ؛ } catch (interruptedException * e) {E.PrintStackTrace () ؛ } أخيرًا {try {dos.close () ؛ dis.close () ؛ * S.Close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} */} فئة خاصة tflistener تنفذ ActionListener {public void actionPerformed (ActionEvent e) {String str = tftxt.getText (). trim () ؛ // tacontent.settext (str) ؛ tftxt.settext ("") ؛ حاول {// system.out.println (s) ؛ dos.writeutf (str) ؛ dos.flush () ؛ // dos.close () ؛ } catch (ioException e1) {e1.printStackTrace () ؛ }}} تنفذ الفئة الخاصة RecVthRead runnable {public void run () {try {while (bconnected) {string str = dis.readutf () ؛ // system.out.println (str) ؛ tacontent.settext (tacontent.getText () + str + '/n') ؛ }} catch (socketException e) {system.out.println ("exit ، bye!") ؛ } catch (eofexception e) {system.out.println ("استثناء ، وداعا - وداعا!") ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}}}رمز خادم المقبس
chatserver.java
Package SocketDemo ؛ import java.io.*؛ import java.net.*؛ import java.util.*؛ public class chatserver {boolean chation = false ؛ Serversocket ss = null ؛ قائمة <Client> Clients = New ArrayList <Plient> () ؛ public static void main (string [] args) {new chatserver (). start () ؛ } public void start () {try {ss = new ServersOcket (8888) ؛ بدأ = صحيح ؛ } catch (bindException e) {system.out.println ("port in use ......") ؛ System.out.println ("يرجى إغلاق البرنامج ذي الصلة وإعادة تشغيل الخادم!") ؛ System.exit (0) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } حاول {بينما (بدء) {socket s = ss.accept () ؛ العميل C = عميل (عميل) جديد ؛ System.out.println ("عميل متصل!") ؛ موضوع جديد (ج) .start () ؛ العملاء. Add (C) ؛ // dis.close () ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {try {ss.close () ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ }}} Class Client يقوم بتنفيذ Runnable {private socket s ؛ datainputstream الخاص dis = null ؛ DataOutputTream DOS الخاص = فارغ ؛ bconnection bconnection = false ؛ العميل العام (المقبس s) {this.s = s ؛ حاول {dis = new datainputStream (s.getInputStream ()) ؛ DOS = جديد dataOutputStream (S.GetOutputStream ()) ؛ bconnected = صحيح ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} public void send (String str) {try {dos.writeutf (str) ؛ } catch (ioException e) {clients.remove (this) ؛ System.out.println ("لقد خرج الطرف الآخر! لقد أزلته من القائمة!") ؛ // e.printstacktrace () ؛ }} public void run () {try {when (bconnected) {string str = dis.readutf () ؛ system.out.println (str) ؛ لـ (int i = 0 ؛ i <clients.size () ؛ i ++) {client c = clients.get (i) ؛ C.Send (Str) ؛ // system.out.println ("سلسلة إرسال!") ؛ } / * * for (iterator <Client> it = clients.iterator () ؛ * it.hasNext () ؛) {client c = it.next () ؛ C.Send (Str) ؛ } * / / * * iterator <Plient> it = clients.iterator () ؛ * بينما (it.hasnext ()) {client c = it.next () ؛ C.Send (Str) ؛ *} */}} catch (eofexception e) {system.out.println ("client leable!") ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (dis! = null) dis.Close () ؛ إذا (dos! = null) dos.close () ؛ if (s! = null) {S.Close () ؛ // s = null ؛ }} catch (ioException e1) {e1.printStackTrace () ؛ }}}}}}نتائج اختبار الاختبار المحلي:
بعد إغلاق نافذة العميل ، تكون الرسالة المذهلة كما يلي:
لمزيد من المعلومات حول المحتوى المتعلق بـ Java ، يرجى مراجعة موضوعات هذا الموقع: "ملخص لمهارات برمجة مقبس Java" ، "ملخص ملفات Java ومهارات تشغيل الدليل" ، "ملخص لمهارات تشغيل بيانات Java" ، "ملخص مهارات تشغيل Java DOM"
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.