Java Socket (Socket) ist auch allgemein als "Socket" bezeichnet, das IP -Adressen und -Ports beschreibt und ein Griff für eine Kommunikationskette ist. Anwendungen stellen normalerweise Anfragen an oder beantworten Sie Netzwerkanfragen über "Sockets".
Verwenden Sie Socket, um die Kommunikation zwischen mehreren Kunden und demselben Kunden zu realisieren. Zunächst stellt der Client eine Verbindung zum Server her, um eine Nachricht zu senden. Der Server verarbeitet die Nachricht nach dem Empfangen der Nachricht und antwortet dann nach dem Abschluss auf den Client auf eine Nachricht. Ich habe einen Code geschrieben, der vom Server und dem Client über mein eigenes Denken implementiert wurde, in der Hoffnung, von allen zu lernen und gemeinsam Fortschritte zu machen.
Servercode
/** * Socket Server * Funktion Beschreibung: * */public class Server {/** * Eintrag * * @param args * @throws ioException */public static void main (String [] args) löst ioException aus {// für Einfachheit, alle Ausnahmeinformationen werden int port = 8899; // Define a Servicesocket Listener auf Port 8899 -Serversocket -Server definiert, einen Hörer auf Port 8899, Serversocket Servers, der auf Port 8899 -Serversel -Server auf Port 8899 -Serverser -Servers -Servers -Server ist, serversserverend. ServerSocket (Port); System.out.println ("Warten Sie auf die Verbindung zum Client ..."); while (true) {// der Server versucht, Verbindungsanforderungen von anderen Sockets zu empfangen. Die Akzeptanzmethode des Servers ist ein Blocking Socket Socket = Server.Accept ();/*** Unser Server verarbeitet die Verbindungsanforderungen des Clients synchron. Jedes Mal, wenn wir eine Verbindungsanforderung vom Kunden erhalten, müssen wir zuerst mit dem aktuellen Kunden kommunizieren, bevor wir die nächste Verbindungsanforderung bearbeiten. Dies wird die Leistung des Programms ernsthaft beeinflussen, wenn mehr Gleichzeitverkehr vorliegt. * Zu diesem Zweck können wir es in die folgende asynchrone Verarbeitung der Kommunikation mit dem Client ändern Task(Socket socket) {this.socket = socket;}@Override public void run() {try {handlerSocket();}catch (Exception e) {e.printStackTrace();}}/** * Communicate with the client Socket* * @throws IOException */private void handlerSocket() throws Exception {// After establishing a connection with the client, we can obtain the Der InputStream von Socket und Lesen Sie die vom Client aus IT/*** gesendeten Informationen beim Empfangen von Daten aus dem InputStream des Sockets. Das Lesen der oben genannten ist zu kompliziert. * Manchmal wechseln wir in BufferedReader, um jeweils eine Zeile zu lesen. * * Die Readline -Methode von BufferedReader liest jeweils eine Zeile. Diese Methode ist blockiert. Das Programm wird nicht weiter ausgeführt, wenn es eine Datenzeile liest. * Wann wird Readline eine Zeile lesen? Die Readline -Methode wird nicht glauben, dass eine Zeile gelesen wurde, und * wird das Blockieren beenden und das Programm weiter ausführen. * Wenn wir also die Readline des BufferedReader verwenden, um Daten zu lesen, müssen wir daran denken, Zeilenumbrüche im entsprechenden Ausgangsstrom zu schreiben (* wird automatisch als Ende nach dem Ende des Streams gekennzeichnet und Readline kann erkannt werden). Nach dem Schreiben von Zeilenumbrüchen müssen wir uns daran erinnern, zu spülen, wenn der Ausgabestream nicht sofort geschlossen ist, * erst dann können die Daten wirklich aus dem Puffer geschrieben werden. */BufferedReader BR = neuer BufferedReader (neuer InputStreamReader (Socket.GetInputStream (), "UTF -8"); StringBuilder Sb = New StringBuilder (); sb.append (temp.substring (0, index)); break;} sb.append (temp);} system.out.println ("Formular Client [Port:" + socket.getPort () + "] Nachrichteninhalt:" + sb.toString (); // Antwort auf den Client -Autor Writer = New OutputStream (Socket. Socket. Socket. Socket. Socket. Socket.ScockWitre (). "Utf-8"); writer.write (String.Format ("Hi,%d. Der Himmel ist hell und die Luft ist klar, der Wind ist glatt!", Socket.getPort ()); writer.flush (); writer.close (); system.out.println ("an den Kunden [Port:" + scetket. erfolgreich "); br.close (); socket.close ();}}}Clientcode
Importieren Sie Java.io.inputStreamReader; Import Java.io.outputStreamWriter; Import Java.io.Reader; Importieren Sie Java.io.io.Writer; importieren Sie Java.net.socket;/*** Socket Client* Funktion Beschreibung:** @author ein weiser und dummes kleines Verständnis* @date, 30. August, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, @@version 1.0*/public Class | @ @ @ @ @ @@version 1.0*/public Class | */public static void main (String [] args) {// Drei Clients öffnen, ein Thread repräsentiert einen Client für (int i = 0; i <3; i ++) {neuer Thread (neuer Runnable () {@Override public void run () {try {testclient = testclientFactory.creatory. Weekend? ", client.client.getLocalport ())) client.receive ();} catch (Ausnahme E) {E.PrintStacktrace ();}}}). Testclient ("127.0.0.1", 8899);}}/*** Test Client*/static Class TestClient {/*** Konstruktor* @param Host IP -Adresse des Servers, um verbunden zu sein Socket (Host, Port); System.out.println ("Client [Port:" + client.getLocalport () + "] eine Verbindung mit dem Server herstellen ...");} private Socket -Client; privater Schriftsteller writer;/** * Senden Sie eine Nachricht * @param msg * @ -Throws Ausnahme */Public void send (String msg). OutputStreamwriter (client.getOutputStream (), "utf-8");} writer.write (msg); writer.write ("eof/n"); writer.flush (); // Nach dem Schreiben erinnern Sie sich nach dem Schreiben. empfangen () löst Ausnahme aus {// Lesen nach dem Schreiben von Reader Reader = New InputStreamReader (Client.getInputStream (), "UTF-8"); // Legen Sie die Zeit fest, Daten auf 10 Sekunden Client zu erhalten. !Als nächstes simulieren wir:
1. Führen Sie zuerst den Server aus
2. Führen Sie dann den Client aus (öffnen Sie drei Client -Anfragen)
Zur Demonstration verwende ich das Eclipse -Tool auf dem Server und das Intellij Ideen -Tool auf dem Client. Zu diesem Zeitpunkt können Sie die vom Client auf der Konsole gedruckte Nachricht sehen
Eine Portnummer repräsentiert einen Client. Schauen wir zurück auf die vom Server auf der Konsole gedruckte Nachricht.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über den Java -Programmierbuchsen, in dem mehrere Clients implementiert werden, um eine Verbindung zu demselben Servercode herzustellen. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht und der Editor antwortet allen rechtzeitig.