Artikel ini menjelaskan fungsi komunikasi klien dan server yang diimplementasikan oleh Java berdasarkan soket. Bagikan untuk referensi Anda, sebagai berikut:
Kode berikut mengacu pada proyek obrolan MA Soldier. Pertama jalankan chatserver.java untuk menerapkan mendengarkan port, dan kemudian jalankan chatclient.java.
Instance Klien
Chatclient.java
Paket SocketDemo; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; kelas publik chatclient memperluas bingkai {socket s = null; DataOutputStream dos = null; DataInputStream dis = null; private boolean bconnected = false; Textfield tftxt = new TextField (); TexTarea tacontent = new TextArea (); Thread trecv = utas baru (recvThread baru ()); public static void main (string [] args) {new chatclient (). launchframe (); } public void launchframe () {setLocation (400, 300); this.setsize (300, 300); add (tftxt, borderlayout.south); Tambah (Tacontent, BorderLayout.North); mengemas(); this.addwindowlistener (windowAdapter baru () {@Override public void windowclosing (windowevent arg0) {disconnect (); system.exit (0);}}); tftxt.addactionListener (tflistener baru ()); setVisible (true); menghubungkan(); trecv.start (); } public void connect () {coba {s = soket baru ("localhost", 8888); DOS = DataOutputStream baru (s.getoutputStream ()); dis = DataInputStream baru (s.getInputStream ()); System.out.println ("Connected!"); BConnected = true; } catch (unknownHostException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }} public void disconnect () {coba {dos.close (); membuka(); s.close (); } catch (ioException e) {e.printstacktrace (); } / * * coba {bconnected = false; trecv.join (); } catch (InterruptedException * e) {E.PrintStackTrace (); } akhirnya {coba {dos.close (); membuka(); * s.close (); } catch (ioException e) {e.printstacktrace (); }} */} kelas pribadi tflistener mengimplementasikan actionListener {public void actionPerformed (actionEvent e) {string str = tftxt.getText (). trim (); // tacontent.setText (str); tftxt.setText (""); coba {// System.out.println (s); dos.writeutf (str); dos.flush (); // dos.close (); } catch (ioException e1) {e1.printstacktrace (); }}} kelas pribadi RecvThread mengimplementasikan 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 ("Keluar, bye!"); } catch (eofexception e) {System.out.println ("Exception, Bye - Bye!"); } catch (ioException e) {e.printstacktrace (); }}}}Socket Server Code
Chatserver.java
Paket SocketDemo; import java.io.*; import java.net.*; import java.util.*; kelas publik chatserver {boolean start = false; Server ss = null; Daftar <CLIPT> CLIENT = NEW ARRAYLIST <CLIPLEY> (); public static void main (string [] args) {new ChatServer (). start (); } public void start () {coba {ss = server baru (8888); dimulai = true; } catch (bindException e) {System.out.println ("port in use ......"); System.out.println ("Harap tutup program yang relevan dan rerun server!"); System.exit (0); } catch (ioException e) {e.printstacktrace (); } coba {while (start) {socket s = ss.accept (); Klien c = klien baru; System.out.println ("Klien yang terhubung!"); utas baru (c) .start (); klien.add (c); // dis.close (); }} catch (ioException e) {E.PrintStackTrace (); } akhirnya {coba {ss.close (); } catch (ioException e) {// TODO AUTO-ENCEALATED Catch Block E.PrintStackTrace (); }}} kelas klien mengimplementasikan runnable {private socket s; private datalputStream dis = null; DoTutputStream dos pribadi = null; private boolean bconnected = false; klien publik (soket s) {this.s = s; coba {dis = new DataInputStream (s.getInputStream ()); DOS = DataOutputStream baru (s.getoutputStream ()); BConnected = true; } catch (ioException e) {e.printstacktrace (); }} public void kirim (string str) {coba {dos.writeutf (str); } catch (ioException e) {client.remove (this); System.out.println ("Pihak lain keluar! Saya menghapusnya dari daftar!"); // e.printstacktrace (); }} public void run () {coba {while (bconnected) {string str = dis.readutf (); System.out.println (str); untuk (int i = 0; i <client.size (); i ++) {client c = client.get (i); C.Send (str); // System.out.println ("A String Send!"); } / * * for (iterator <Client> it = client.iterator (); * it.hasnext ();) {client c = it.next (); C.Send (str); } * / / / * * Iterator <Client> it = client.iterator (); * while (it.hasnext ()) {client c = it.next (); C.Send (str); *} */}} catch (eOfException e) {System.out.println ("Klien Tertutup!"); } catch (ioException e) {e.printstacktrace (); } akhirnya {coba {if (dis! = null) dis.close (); if (dos! = null) dos.close (); if (s! = null) {s.close (); // s = null; }} catch (ioException e1) {e1.printstacktrace (); }}}}}}Hasil uji coba lokal:
Setelah menutup jendela klien, pesan prompt adalah sebagai berikut:
For more information about Java related content, please check out the topics of this site: "Summary of Java Socket Programming Skills", "Summary of Java File and Directory Operation Skills", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills" and "Summary of Java Cache Operation Skills"
Saya harap artikel ini akan membantu pemrograman Java semua orang.