Dieser Artikel teilt die Java -Gruppen -Chat -Funktion als Referenz. Der spezifische Inhalt ist wie folgt
Java -Unterstützung für TCP -Protokoll:
-> Das Java.net-Paket definiert zwei Klassen ServerSocket und Socket, die zur Implementierung bidirektionaler Verbindungen verwendet werden.
-> Client-Klasse definiert den Client
package 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[]) throws UnknownHostException, IOException { Socket client = new Socket ("192.168.1.188", 10000); // Der Thread, der Informationen über das Stück New Clientsend (Client) .Start () sendet; // Erstellen Sie einen Thread, der Informationen nützt. Neue ClientReceive (Client) .Start (); // Da Sie die Chat -Funktion implementieren möchten, anstatt Informationen nur einmal zu senden, können weder der Ausgabestream noch der Client geschlossen werden. // client.shutdownoutput (); // client.close (); }}-> Clientsend-Klasse definiert den Thread, auf dem der Client Informationen an den Server sendet
Paket com.dragon.java.tcpchat; import java.io.ioxception; import Java.io.printstream; importieren java.net.socket; import Java.util.scanner;/** * Thread, bei dem der Client Informationen an den Server sendet * * @Author Ausser */Public Class Clients -Clientsends -Thread {private Scanner scaner; private Socket Socket; public Clientsend (Socket Socket) {this.socket = Socket; } @Override public void run () {scanner = neuer Scanner (System.in); try {printStream ps = new printStream (socket.getOutputStream ()); String line = ""; // Blockieren von Senden von Informationen while ((line = scanner.nextline ())! = Null) {ps.println (Zeile); }} catch (ioException e) {e.printstacktrace (); }}}-> ClientReceive-Klasse Definiert den Thread, auf dem der Client Serverinformationen empfängt
Paket com.dragon.java.tcpchat; import java.io.bufufferedReader; import Java.io.inputStreamReader; Import Java.net.socket;/** * Thread auf dem Client -Empfangsinformationen * * @Author Auser * */Public ClassCeice erweitert Thread {private Socket -Socket; public ClientReceive (Socket Socket) {this.socket = Socket; } @Override public void run () {try {bufferedReader br = new bufferedReader (neuer InputStreamReader (socket.getInputStream ())); // Informationen nach Zeilenstring -Zeile = "" erhalten; while ((line = br.readline ())! = null) {System.out.println (Linie); }} catch (Ausnahme e) {e.printstacktrace (); }}}-> Serverklassendefinitionserver Server
Paket com.dragon.java.tcpchat; import java.io.ioxception; import Java.net.serversocket; importieren java.net.socket; InterruptedException {list <Socket> list = new ArrayList <> (); // Erstellen Sie einen serverseitigen Socket ServerSocket Server = New ServerSocket (10000); while (true) {// Blockierungsmethode zum Empfangen des Client -Socket Socket = Server.Accept (); // Entwerfen mehrerer Threads, die den Set addieren oder löschen können, synchronisiert (list) {list.add (Socket); } // einen neuen Thread starten, um die Kommunikation dieses Kunden neu zu verarbeiten (Socket, Liste) .Start (); } // Da Sie nicht wissen, wann der Client Informationen sendet, muss der Server eingeschaltet werden und kann nicht ausgeschaltet werden. }}-> HandleSocket-Klasse arbeitet mit Clients, die mit dem Server verbunden sind (obere und offline-Benachrichtigungen, Blockieren und Erpressung, Senden von Informationen an jeden Client usw.)
Paket com.dragon.java.tcpchat; import Java.io.bufufferedReader; Import Java.io.ioException; import Java.io.inputStreamReader; Java.io.printstream importieren java.net.inetaddress; import Java.net. Steckdose; private Liste <Socket> Liste; / *** Konstruktor** @param Socket* Derzeit angeschlossener Client* @paramliste* Sammlung von gespeicherten verbundenen Clients*/ public HandleSocket (Socket Socket, Liste <Socket> Liste) {this.socket = Socket; this.list = list; } / *** Thread Run -Methode* / @Override public void run () {inetaddress address = socket.getInetadDress (); // Die Adresse des Clients erhalten, der mit der Server -Zeichenfolge angeschlossen ist. System.out.println (IP + "Lass uns online gehen!"); if (ip.equals ("192.168.1.117")) {synchronisierte (Liste) {sendToall (IP + "Blacklist wegen Verstoßes!"); list.remove (Socket); } zurückkehren; } try {bufferedReader br = new bufferedReader (neuer InputStreamReader (socket.getInputStream (), "gbk"); String line = ""; while ((line = br.readline ())! = null) {string msg = ip + ":" + line; System.out.println (MSG); // Ausgabe an die Serverkonsole // Senden Sie, was dieser Client an alle anderen Clients SendToall (MSG) sagt; }} catch (ioException e) {// e.printstacktrace (); System.out.println (IP + "Offlined!"); synchronisiert (list) {list.remove (Socket); }}} / ** * Senden Sie Informationen an alle Clients und entfernen Sie den aktuellen Socket * * @param msg * Die von * / private void sendToAll (String msg) {synchronisierten (list) {for (socket s: list) {if (s! = Soclet) {try {printstream ps = new printstream (s.sGETOTSPREAM (); ps.println (); } catch (ioException e) {e.printstacktrace (); }}}}}}}}}}} -> Hinweis: Da der Client eine Verbindung zum Server herstellen kann, muss der Client zuerst den Server finden, damit der Server zuerst aktiviert sein muss und dann der Server ...
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.