Cet article partage la fonction de chat de groupe Java pour votre référence. Le contenu spécifique est le suivant
Prise en charge Java pour le protocole TCP:
-> Le package java.net définit deux classes Serversocket et socket, qui sont utilisées pour implémenter des connexions bidirectionnelles, respectivement.
-> La classe du client définit le client
package com.dragon.java.tcpchat; importer java.io.ioexception; import java.net.socket; import java.net.unknownhostException; / ** * client * * @author auser * * / public class Client {public static void main (String args []) lance undinhostexception, ioexception {socket client = new Socket ("192.168.1.188", 10000); // le thread qui envoie des informations via la pièce New Clientsend (client) .Start (); // Créer un thread qui reçoit des informations New ClientReceive (client) .Start (); // Parce que vous souhaitez implémenter la fonction de chat au lieu d'envoyer des informations qu'une seule fois, ni le flux de sortie ni le client ne peuvent être fermés. // client.shutdownoutput (); // client.close (); }}-> CLIENTSEND CLASS définit le thread sur lequel le client envoie des informations au serveur
package com.dragon.java.tcpchat; import java.io.ioexception; import java.io.printstream; importer java.net.socket; import java.util.scanner; / ** * thread où le client envoie des informations au serveur * * @author auSer * * / public classe CLASSEDSEND le filetage {private scanner scanner; prise à douille privée; CLIENTSEND PUBLIQUE (socket socket) {this.socket = socket; } @Override public void run () {Scanner = new Scanner (System.in); essayez {printStream ps = new printStream (socket.getOutputStream ()); Chaîne line = ""; // Bloquer des informations d'envoi while ((line = scanner.NextLine ())! = Null) {ps.println (line); }} catch (ioException e) {e.printStackTrace (); }}}-> ClientReceive Class définit le thread sur lequel le client reçoit des informations de serveur
Package com.dragon.java.tcpchat; Importer java.io.bufferedeader; import java.io.inputStreamReader; import java.net.socket; / ** * thread sur le client recevant des informations * * @author auser * * / classe publique ClientReceive étend Thread {sootet private sootket; ClientReceive publique (socket socket) {this.socket = socket; } @Override public void run () {try {buttereDeader br = new BufferedReader (new inputStreamReader (socket.getInputStream ())); // reçoit des informations par line string line = ""; while ((line = br.readline ())! = null) {System.out.println (line); }} catch (exception e) {e.printStackTrace (); }}}-> serveur de définition de classe de serveur
package com.dragon.java.tcpchat; importer java.io.ioexception; import java.net.serversocket; import java.net.socket; import java.util.arraylist; import java.util.list; / ** * server * * @author auser * * / public class server {public static void main {List <Socket> list = new ArrayList <> (); // Créer un socket côté serveur Serversocket Server = new serversocket (10000); while (true) {// Bloquer la méthode de réception du socket client = server.accept (); // Concevoir plusieurs threads qui peuvent ajouter ou supprimer l'ensemble, synchronisé (list) {list.add (socket); } // Démarrez un nouveau thread pour gérer la communication de ce client New Handlesocket (socket, list) .start (); } // Parce que vous ne savez pas quand le client envoie des informations, le serveur doit être activé et ne peut pas être désactivé. }}-> handlesocket Class fonctionne sur des clients connectés au serveur (notifications supérieures et hors ligne, blocage et chantage, envoi des informations à chaque client, etc.)
Package com.dragon.java.tcpchat; import java.io.bufferederader; import java.io.ioexception; import java.io.inputstreamreader; import java.io.printstream; import java.net.inetaddress; import java.net.socket; importer java.util.list; / ** * prise; Liste privée <Socket> Liste; / ** * Constructeur * * @param socket * Client actuellement connecté * @param liste * Collection de clients connectés stockés * / public handlesocket (socket socket, list <socket> list) {this.socket = socket; this.list = list; } / ** * Méthode de filetage * / @Override public void run () {InetAddress Address = socket.getinetAddress (); // Obtenez l'adresse du client connecté à la chaîne de serveur ip = adresse.GethostAddress (); System.out.println (IP + "Allons en ligne!"); if (ip.equals ("192.168.1.117")) {synchronisé (list) {sendtoall (ip + "listé noire en raison de la violation!"); list.remove (socket); } retour; } try {buttereDreader br = new BufferedReader (new inputStreamReader (socket.getInputStream (), "gbk")); Chaîne line = ""; while ((line = br.readline ())! = null) {String msg = ip + ":" + line; System.out.println (msg); // Sortie vers la console du serveur // Envoyez ce que ce client dit à tous les autres clients SendToAll (MSG); }} catch (ioException e) {// e.printStackTrace (); System.out.println (IP + "Offined!"); synchronisé (list) {list.Remove (socket); }}} / ** * Envoyez des informations à tous les clients et supprimez le socket actuel * * @param msg * les informations envoyées par * / private void Sendtoall (String msg) {synchronisé (list) {for (socket s: list) {if (s! = Socket) {try {printStream ps = new printStream (s.getOutSutam ()); Ps.println (); } catch (ioException e) {e.printStackTrace (); }}}}}}}}}} -> Remarque: Parce que pour permettre au client de se connecter au serveur, c'est-à-dire que le client doit d'abord trouver le serveur, le serveur doit donc être activé d'abord puis le serveur ...
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.