Este artigo compartilha a função de bate -papo do Java Group para sua referência. O conteúdo específico é o seguinte
Suporte de Java para o Protocolo TCP:
-> O pacote java.net define duas classes ServerSocket e Socket, que são usados para implementar conexões bidirecionais, respectivamente.
-> classe cliente define o cliente
pacote com.dragon.java.tcpchat; importar java.io.ioException; importar java.net.socket; importar java.net.unknownhostException;/** * cliente * * @author aUSHHOST * */public class Client {public STATID Maid Main (string args []) SlownshhHos Socket ("192.168.1.188", 10000); // o thread que envia informações através da peça New CustersEnd (cliente) .start (); // Crie um thread que receba informações new clientReceive (cliente) .start (); // Porque você deseja implementar a função de bate -papo em vez de enviar informações apenas uma vez, nem o fluxo de saída nem o cliente podem ser fechados. // client.shutdownoutput (); // client.close (); }}-> CLIENTEND Class define o tópico no qual o cliente envia informações para o servidor
pacote com.dragon.java.tcpchat; importar java.io.ioException; importar java.io.printstream; importar java.net.socket; importar java.util.scanner;/** ** ** ** ** Thread onde o cliente envia informações para o servidor * * @author auser * */public CLASTERNENDS EXTENDSENDS {AUSHER AUSER *; soquete privado soquete; public clientsEnd (soquete) {this.socket = soket; } @Override public void run () {scanner = new Scanner (System.in); tente {printStream ps = new PrintStream (Socket.getOutputStream ()); String line = ""; // bloqueando informações de envio while ((line = scanner.nextLine ())! = Null) {ps.println (linha); }} catch (ioexception e) {e.printStackTrace (); }}}-> Classe ClientReceive Define o thread no qual o cliente recebe informações do servidor
pacote com.dragon.java.tcpchat; importar java.io.bufferedReader; importar java.io.inputStreamReader; importar java.net.socket;/** * encadeamento do cliente que recebe informações * * * @author auser * */public class CustomReive Extrends Thread {private Sceket; public ClientReceive (soquete) {this.socket = soket; } @Override public void run () {try {bufferredReader Br = new BufferredReader (new InputStreamReader (Socket.getInputStream ())); // recebe informações por linha string linha = ""; while ((line = Br.readline ())! = null) {System.out.println (line); }} catch (Exceção e) {e.printStackTrace (); }}}-> Servidor de definição de classe do servidor
pacote com.dragon.java.tcpchat; importar java.io.ioException; importar java.net.erversocket; importar java.net.socket; importar java.util.arrayList; import java.util.list;/** server * * * * @Author auser * * */servidor public {publicl. InterruptEdException {list <socket> list = new ArrayList <> (); // Crie um servidor servidor servidor servidor servidor = new ServerSocket (10000); while (true) {// Método de bloqueio de receber o soquete do cliente = server.accept (); // projetando vários threads que podem adicionar ou excluir o conjunto, sincronizado (list) {list.add (soquete); } // Inicie um novo thread para lidar com a comunicação deste cliente novo HandleSocket (soquete, lista) .start (); } // Como você não sabe quando o cliente envia informações, o servidor deve ser ativado e não pode ser desligado. }}-> A classe HandleSocket opera em clientes conectados ao servidor (notificações superiores e offline, bloqueio e chantagem, enviando informações para cada cliente, etc.)
pacote com.dragon.java.tcpchat; importar java.io.bufferedreader; importar java.io.ioexception; importar java.io.inputStreamReader; importar java.io.printstream; importar java.net.inetaddress; importar java.net.socket; importen; import.kaTa.net.net.inetaddress; soquete; Lista privada <socket> Lista; / *** Construtor** @param soquete* cliente atualmente conectado* @param list* coleção de clientes conectados armazenados*/ public handlesocket (soquete, list <seket> list) {this.socket = soquete; this.list = list; } / *** Método de execução do thread* / @Override public void run () {inetAddress endereço = soquete.getineTAddress (); // Obtenha o endereço do cliente conectado ao servidor string ip = endereço.gethostaddress (); System.out.println (IP + "Vamos online!"); if (ip.equals ("192.168.1.117")) {sincronizado (list) {sendToall (ip + "lista negra devido a violação!"); list.Remove (soquete); } retornar; } tente {bufferredreader br = new buffarredread (new inputStreamReader (soket.getInputStream (), "gbk")); String line = ""; while ((line = Br.readline ())! = null) {string msg = ip + ":" + line; System.out.println (msg); // Saída para o console do servidor // Envie o que esse cliente diz a todos os outros clientes SendToall (MSG); }} catch (ioexception e) {// e.printStackTrace (); System.out.println (IP + "Offlined!"); sincronizado (list) {list.remove (soquete); }}} / ** * Envie informações a todos os clientes e remova o soquete atual * * @param msg * as informações enviadas por * / private void sendToall (string msg) {synchronized (list) {for (socket s: list) {if (s! ps.println (); } catch (ioexception e) {e.printStackTrace (); }}}}}}}}}} -> Nota: porque para permitir que o cliente se conecte ao servidor, ou seja, o cliente deve primeiro encontrar o servidor, para que o servidor deve ser ativado primeiro e depois o servidor ...
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.