Este artículo comparte la función de chat del grupo Java para su referencia. El contenido específico es el siguiente
Soporte Java para el protocolo TCP:
-> El paquete Java.net define dos clases Serversocket y Socket, que se utilizan para implementar conexiones bidireccionales, respectivamente.
-> La clase de cliente define al cliente
paquete com.dragon.java.tcpchat; import java.io.ioException; import java.net.socket; import java.net.unknownhostException;/** * Client * * @author auser * */public class Client {public static void main (string args []) tira desconocido Socket ("192.168.1.188", 10000); // el hilo que envía información a través de la pieza New ClientSend (Cliente) .Start (); // Cree un hilo que reciba información New ClientReceive (Cliente) .Start (); // porque desea implementar la función de chat en lugar de enviar información solo una vez, ni la secuencia de salida ni el cliente pueden cerrarse. // client.shutdodoutput (); // client.close (); }}-> La clase de ClientSend define el hilo en el que el cliente envía información al servidor
paquete com.dragon.java.tcpchat; import java.io.ioException; import java.io.printstream; import java.net.socket; import java.util.scanner;/** * Subproceso cuando el cliente envía información al servidor * * @author AUSER * */Clientes de clase pública Extensión extendida THIME {Scanner privado; enchufe privado; Public ClientSend (socket socket) {this.socket = socket; } @Override public void run () {scanner = new Scanner (System.in); intente {printStream PS = new PrintStream (Socket.getOutputStream ()); Línea de cadena = ""; // Bloquear la información de envío mientras ((línea = Scanner.NextLine ())! = NULL) {Ps.Println (línea); }} catch (ioException e) {E.PrintStackTrace (); }}}-> Cliente Clase Class define el hilo en el que el cliente recibe información del servidor
paquete com.dragon.java.tcpchat; import java.io.bufferedReader; import java.io.inputstreamreader; import java.net.socket;/** * Subh en el cliente que recibe información * * @author Auser * */public classReceive Extends Extends Hilo {Sobtor de zócalo privado; Public ClientReceive (socket Socket) {this.socket = socket; } @Override public void run () {try {bufferedReader br = new BufferedReader (new InputStreamReader (Socket.GetInputStream ())); // Recibir información por línea String Line = ""; while ((línea = br.readline ())! = null) {system.out.println (línea); }} catch (Exception e) {E.PrintStackTrace (); }}}-> servidor de definición de clase del servidor
paquete com.dragon.java.tcpchat; import java.io.ioexception; import java.net.serversocket; import java.net.socket; import java.util.arrayList; import java.util.list;/** * servidor * * @author aUser * */public class Server {public static void main (string [] argssiSts Ioexts, sells Ioexctual InterruptedException {list <Socket> list = new ArrayList <> (); // crear un servidor Servidor de Socket del lado del servidor = nuevo Serversocket (10000); while (true) {// Método de bloqueo para recibir el socket de cliente Socket = server.accept (); // Diseño de múltiples hilos que pueden agregar o eliminar el conjunto, sincronizado (list) {list.add (socket); } // Inicie un nuevo hilo para manejar la comunicación de este cliente nuevo Handlesocket (Socket, List) .Start (); } // Porque no sabe cuándo el cliente envía información, el servidor debe activarse y no se puede apagar. }}-> La clase Handlesocket opera en clientes conectados al servidor (notificaciones superiores y fuera de línea, bloqueo y chantaje, enviando información a cada cliente, etc.)
paquete com.dragon.java.tcpchat; import java.io.bufferedReader; import java.io.ioException; import java.io.inputstreamreader; import java.io.printstream; import java.net.inetaddress; import java.net.socket; import java.util.list;/*** HandlessockEntsocket {privado shock {privado shock {shock shutketsphies shock {shock shutketsetting shutkets. Lista de lista privada <Socket>; / *** constructor** @param socket* Cliente actualmente conectado* @param Lista* Colección de clientes conectados almacenados*/ public Handlesocket (Socket Socket, List <Socket> List) {this.socket = Socket; this.list = list; } / *** Método de ejecución de hilo* / @Override public void run () {ineTAddress dirección = Socket.getInetDress (); // Obtenga la dirección del cliente conectada a la cadena del servidor ip = dirección.gethostaddress (); System.out.println (IP + "¡Vamos en línea!"); if (ip.equals ("192.168.1.117")) {sincronizado (list) {sendToall (ip + "lista negra debido a la violación!"); list.remove (socket); } devolver; } try {BufferedReader br = new BufferedReader (new InputStreamReader (Socket.getInputStream (), "GBK")); Línea de cadena = ""; while ((línea = br.readline ())! = null) {string msg = ip + ":" + line; System.out.println (MSG); // Salida a la consola del servidor // Envía lo que este cliente dice a todos los demás clientes SendToall (MSG); }} catch (ioException e) {// e.printstackTrace (); System.out.println (IP + "Offlined!"); sincronizado (list) {list.remove (socket); }}} / ** * Envíe información a todos los clientes y elimine el socket actual * * @param msg * La información enviada por * / private void sendToall (string msg) {sincronizado (list) {for (Socket s: list) {if (s! = Socket) {try {Print Samps PS = new Impress (s.geroutStream ()); ps.println (); } catch (ioException e) {E.PrintStackTrace (); }}}}}}}}}} -> Nota: porque para habilitar el cliente se conecte al servidor, es decir, el cliente primero debe encontrar el servidor, por lo que el servidor debe habilitarse primero y luego el servidor ...
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.