Este artículo describe las funciones de comunicación del cliente y del servidor implementadas por Java en función de Socket. Compártelo para su referencia, como sigue:
El siguiente código se refiere al proyecto de chat de MA Soldier. Primero ejecute chatserver.java para implementar la escucha de puertos y luego ejecute chatclient.java.
Instancia del cliente
Chatclient.java
paquete Socketdemo; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class chatClient extiende marco {Socket s = null; DatautputStream dos = null; DataInputStream dis = null; booleano privado bconnected = false; TextField tftxt = new TextField (); TextArea tacontent = new TextArea (); Thread trecv = new Thread (new RecvThread ()); public static void main (string [] args) {nuevo chatClient () .unchFrame (); } public void Launchframe () {SetLocation (400, 300); this.setsize (300, 300); agregar (tftxt, borderLayout.South); agregar (tacontent, borderLayout.north); embalar(); this.addwindowlistener (New WindowAdapter () {@Override public void WindowClosing (WindowsEvent Arg0) {disconnect (); System.exit (0);}}); tftxt.addactionListener (new tflistener ()); setVisible (verdadero); conectar(); trecv.start (); } public void Connect () {try {s = new Socket ("localhost", 8888); dos = new DataOutputStream (s.getOutputStream ()); dis = new DataInputStream (s.getInputStream ()); System.out.println ("¡Connected!"); bconnected = verdadero; } capt (desconocidoHosTexception e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); }} public void disconnect () {try {dos.close (); revelar(); s.close (); } catch (ioException e) {E.PrintStackTrace (); } / * * try {bconnected = false; trecv.Join (); } capt (interruptedException * e) {E.PrintStackTrace (); } finalmente {try {dos.close (); revelar(); * s.close (); } catch (ioException e) {E.PrintStackTrace (); }} */} clase privada Tflistener implementa ActionListener {public void ActionPerformed (ActionEvent E) {String Str = tftxt.gettext (). Trim (); // tacontent.settext (str); tftxt.settext (""); intente {// system.out.println (s); dos.Writeutf (str); dos.flush (); // dos.close (); } catch (ioException e1) {e1.printstackTrace (); }}} La clase privada recvThread implementa 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 ("¡Salir, adiós!"); } catch (eOfException e) {System.out.println ("Excepción, adiós - ¡adiós!"); } catch (ioException e) {E.PrintStackTrace (); }}}}código de servidor de socket
Chatserver.java
paquete SocketDemo; import java.io.*; import java.net.*; import java.util.*; public class chatserver {boolean inicial = false; ServerSocket ss = nulo; List <Client> clientes = new ArrayList <Client> (); public static void main (string [] args) {new ChatServer (). Start (); } public void start () {try {ss = new Serversocket (8888); iniciado = verdadero; } Catch (BindException e) {System.out.println ("puerto en uso ......"); System.out.println ("¡Cierre el programa relevante y vuelva a ejecutar el servidor!"); System.exit (0); } catch (ioException e) {E.PrintStackTrace (); } try {while (iniciado) {socket s = ss.accept (); Cliente C = Nuevo Cliente (s); System.out.println ("¡Un cliente conectado!"); nuevo hilo (c) .Start (); clientes.Add (c); // dis.close (); }} catch (ioException e) {E.PrintStackTrace (); } finalmente {try {ss.close (); } Catch (ioException e) {// tODO Auto Generated BLOCK E.PrintStackTRace (); }}} Class Client implementa Runnable {private Socket s; privado datainputStream dis = null; DatautputStream privado Dos = null; booleano privado bconnected = false; Cliente público (Socket s) {this.s = s; intente {dis = new DataInputStream (s.getInputStream ()); dos = new DataOutputStream (s.getOutputStream ()); bconnected = verdadero; } catch (ioException e) {E.PrintStackTrace (); }} public void send (string str) {try {dos.writeutf (str); } catch (ioException e) {clients.remove (this); System.out.println ("¡La otra parte salió! ¡Lo eliminé de la lista!"); // E.PrintStackTrace (); }} public void run () {try {while (bconnected) {string str = dis.readutf (); System.out.println (str); for (int i = 0; i <clients.size (); i ++) {client c = clients.get (i); c.send (str); // System.out.println ("¡Un envío de cadenas!"); } / * * for (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 ("Cliente cerrado!"); } catch (ioException e) {E.PrintStackTrace (); } finalmente {try {if (dis! = null) dis.close (); if (dos! = null) dos.close (); if (s! = null) {s.close (); // s = nulo; }} catch (ioException e1) {e1.printstackTrace (); }}}}}}Los resultados de la ejecución de la prueba local:
Después de cerrar la ventana del cliente, el mensaje de inmediato es el siguiente:
Para obtener más información sobre el contenido relacionado con Java, consulte los temas de este sitio: "Resumen de las habilidades de programación de socket de Java", "Resumen de las habilidades de operación de archivos y directorio de Java", "Tutorial sobre estructura de datos de Java y algoritmo", "Resumen de las habilidades de nodo de operación DOM de Java" y "Resumen de las habilidades de operación de java" "
Espero que este artículo sea útil para la programación Java de todos.