Dieser Artikel beschreibt die von Java implementierten Client- und Serverkommunikationsfunktionen basierend auf Socket. Teilen Sie es für Ihre Referenz wie folgt weiter:
Der folgende Code bezieht sich auf das Chat -Projekt des Soldaten. Führen Sie zuerst chatserver.java aus, um das Port -Hören zu implementieren, und führen Sie Chatclient.java aus.
Kundeninstanz
Chatclient.java
Paket Socketdemo; import Java.awt.*; Import Java.awt.event.*; Import Java.io. DataOutputStream dos = null; DataNputStream dis = null; privat boolean bconnected = false; Textfield tftxt = new textField (); Textarea tacontent = new textarea (); Thread TRECV = neuer Thread (neuer recvThread ()); public static void main (String [] args) {new chatclient (). launchframe (); } public void launchFrame () {setLocation (400, 300); this.setsize (300, 300); add (tftxt, borderLayout.South); add (tacontent, borderLayout.north); Pack(); this.addwindowlistener (neuer Fensteradapter () {@Override public void windowsClosieren (windowEvent arg0) {disconnect (); System.exit (0);}}); tftxt.addactionListener (new tflistener ()); setvisible (wahr); verbinden(); trecv.start (); } public void Connect () {try {s = neuer Socket ("localhost", 8888); dos = new DataOutputStream (S.GetOutputStream ()); dis = new DataNputStream (S.GetInputStream ()); System.out.println ("Connected!"); bconnected = true; } catch (unbekannteHostException 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 (); } endlich {try {dos.close (); dis.close (); * S.CLOSE (); } catch (ioException e) {e.printstacktrace (); }} */} private class tflistener implementiert actionListener {public void actionPerformed (actionEvent e) {string str = tftxt.getText (). trim (); // tacontent.setText (str); tftxt.setText (""); try {// system.out.println (s); dos.writeUtf (str); dos.flush (); // dos.close (); } catch (ioException e1) {e1.printstacktrace (); }}} private class recvthread implements runnable {public void run () {try {while (bConnected) {string str = dis.readutf (); // system.out.println (str); tacontent.setText (tacontent.GeteText () + str + '/n'); }} catch (socketException e) {System.out.println ("Beenden, Bye!"); } catch (eOfException e) {System.out.println ("Ausnahme, Bye - Bye!"); } catch (ioException e) {e.printstacktrace (); }}}}Socket -Servercode
Chatserver.java
Paket Socketdemo; import Java.io.*; Import Java.net.*; Import Java.util. ServerSocket SS = NULL; Liste <Codes> clients = new ArrayList <Client> (); public static void main (String [] args) {new chatServer (). start (); } public void start () {try {ss = new serversocket (8888); gestartet = wahr; } catch (bindException e) {System.out.println ("Port in Gebrauch ......"); System.out.println ("Bitte schließen Sie das relevante Programm und leiten Sie den Server aus!"); System.exit (0); } catch (ioException e) {e.printstacktrace (); } try {while (gestartet) {Socket s = ss.accept (); Client C = neue Client (s); System.out.println ("Ein Client angeschlossen!"); neuer Thread (c) .Start (); Clients.Add (c); // dis.close (); }} catch (ioException e) {e.printstacktrace (); } endlich {try {ss.close (); } catch (ioException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); }}} class Client implementiert runnable {private Socket S; private datainputstream dis = null; private DataOutputStream dos = null; privat boolean bconnected = false; public Client (Socket s) {this.s = s; try {dis = new DataNputStream (S.GetInputStream ()); dos = new DataOutputStream (S.GetOutputStream ()); bconnected = true; } catch (ioException e) {e.printstacktrace (); }} public void send (String str) {try {dos.writeutf (str); } catch (ioException e) {Clients.remove (this); System.out.println ("Die andere Partei hat es verlassen! Ich habe es von der Liste entfernt!"); // e.printstacktrace (); }} public void run () {try {while (bConnected) {string str = dis.readutf (); System.out.println (str); für (int i = 0; i <Clients.size (); i ++) {client c = clients.get (i); C.Send (str); // system.out.println ("a String send!"); } / * * für (iterator <client> iT = clients.Iterator (); * it.hasnext ();) {client c = it.Next (); C.Send (str); } * / / * * Iterator <client> iT = clients.Iterator (); * while (it.hasNext ()) {client c = it.next (); C.Send (str); *} */}} catch (eOfException e) {System.out.println ("Client geschlossen!"); } catch (ioException e) {e.printstacktrace (); } endlich {try {if (dis! = null) dis.close (); if (dos! = null) dos.close (); if (s! = null) {s.close (); // s = null; }} catch (ioException e1) {e1.printstacktrace (); }}}}}}Die Ergebnisse des lokalen Testlaufs:
Nach dem Schließen des Client -Fensters lautet die Eingabeaufforderung wie folgt:
Weitere Informationen zu Java -verwandten Inhalten finden Sie in den Themen dieser Website: "Zusammenfassung der Java -Socket -Programmierkenntnisse", "Zusammenfassung der Java -Datei- und Verzeichnisbetriebsfähigkeiten", "Tutorial über Java -Datenstruktur und Algorithmus", "Zusammenfassung der Java -Operation DOM -Knotenkompetenz" und "Zusammenfassung der Fähigkeiten der Java -Operation", "Zusammenfassung der Fähigkeiten der Java -Operation" "Zusammenfassung der Fähigkeiten der Java -Operation" und "Zusammenfassung der Fähigkeiten der Java -Operation" "
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.