In diesem Artikel wird die auf dem TCP-Protokoll basierende Java-Socket-Programmiermethode anhand von Beispielen beschrieben und als Referenz für alle freigegeben. Die spezifische Analyse lautet wie folgt:
Das Folgende ist eine Eins-zu-Eins-Kommunikationsprogrammierungsimplementierung. Später werden wir die Implementierung eines Servers erlernen, der mehrere Clients überwacht.
Die hier verwendeten Hauptschritte sind wie folgt:
Schritt 1: Erstellen Sie ein neues Socket-Objekt mit einem bestimmten Port (z. B. 4800). Schritt 2: Erstellen Sie ein BufferedReader-Objekt mit dem Systemeingabegerät, das zum Empfangen von Zeicheneingaben über die Systemtastatur verwendet wird. Schritt 3: Holen Sie sich den Ausgabestream vom Socket-Objekt, um einen PrintWriter zu erstellen
Schritt 4: Verwenden Sie das Socket-Objekt, um den Eingabestream abzurufen und das entsprechende BufferedReader-Objekt zu erstellen, das zum Empfangen der vom Server gesendeten Informationen verwendet wird.
Was ich unter dem Schließen des Sockets verstehe: Zuerst öffnen und später schließen, und der Socket wird zuletzt geschlossen.
Das Folgende ist die Client-Code-Implementierung:
Kopieren Sie den Code wie folgt: package com.fan.socket;
java.io.* importieren;
java.net.Socket importieren;
öffentliche Klasse SocketClient {
public static void main(String[] args) löst eine IOException{ aus
versuchen{
Socket socket=new Socket("127.0.0.1",4800);
System.out.println("Client-Start ...");
//Senden Sie eine Client-Anfrage an Port 4800 dieser Maschine
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//Erstelle ein BufferedReader-Objekt aus dem Standardeingabegerät des Systems
PrintWriter write=new PrintWriter(socket.getOutputStream());
// Den Ausgabestream vom Socket-Objekt abrufen und das PrintWriter-Objekt erstellen
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Holen Sie sich den Eingabestream vom Socket-Objekt und erstellen Sie das entsprechende BufferedReader-Objekt
String readline;
readline=br.readLine(); //Eine Zeichenfolge aus der Standardeingabe des Systems lesen
while(!readline.equals("end")){
//Wenn die aus der Standardeingabe gelesene Zeichenfolge „end“ ist, stoppen Sie die Schleife
write.println(readline);
//Geben Sie die aus der Standardeingabe des Systems gelesene Zeichenfolge an Server2 aus
write.flush();
//Aktualisieren Sie den Ausgabestream, damit der Server die Zeichenfolge sofort empfängt
System.out.println("Client:"+readline);
//Drucken Sie die gelesene Zeichenfolge auf der Standardausgabe des Systems
System.out.println("Server:"+in.readLine());
//Eine Zeichenfolge vom Server lesen und auf der Standardausgabe ausgeben
readline=br.readLine(); //Eine Zeichenfolge aus der Standardeingabe des Systems lesen
} //Schleife fortsetzen
write.close(); //Schließe den Socket-Ausgabestream
in.close(); //Schließe den Socket-Eingabestream
socket.close(); //Socket schließen
}catch(Ausnahme e) {
System.out.println("can not listen to:"+e);//Fehler, Fehlermeldung drucken
}
}
}
Serverseitige Code-Implementierung:
Kopieren Sie den Code wie folgt: package com.fan.socket;
java.io.* importieren;
import java.net.ServerSocket;
java.net.Socket importieren;
öffentliche Klasse SocketService {
public static void main(String[] args) löst eine IOException{ aus
SocketService socketService = new SocketService();
socketService.oneServer();
}
public void oneServer(){
versuchen{
ServerSocket server=null;
versuchen{
server=new ServerSocket(4800);
System.out.println("Serverstart ist ok...");
//Erstellen Sie einen ServerSocket, um auf Client-Anfragen an Port 4800 zu lauschen
}catch(Ausnahme e) {
System.out.println("kann nicht hören:"+e);
//Fehler, Fehlermeldung drucken
}
Socket socket=null;
versuchen{
socket=server.accept();
//Verwenden Sie Accept(), um Kundenanfragen zu blockieren und auf sie zu warten
//Wenn die Anfrage eintrifft, wird ein Socket-Objekt generiert und die Ausführung fortgesetzt.
}catch(Ausnahme e) {
System.out.println("Fehler."+e);
//Fehler, Fehlermeldung drucken
}
String-Linie;
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Holen Sie sich den Eingabestream vom Socket-Objekt und erstellen Sie das entsprechende BufferedReader-Objekt
PrintWriterwriter=new PrintWriter(socket.getOutputStream());
// Den Ausgabestream vom Socket-Objekt abrufen und das PrintWriter-Objekt erstellen
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//Erstelle ein BufferedReader-Objekt aus dem Standardeingabegerät des Systems
System.out.println("Client:"+in.readLine());
//Drucken Sie die vom Client gelesene Zeichenfolge auf der Standardausgabe
line=br.readLine();
//Eine Zeichenfolge aus der Standardeingabe lesen
while(!line.equals("end")){
//Wenn die Zeichenfolge „bye“ lautet, wird die Schleife gestoppt
Writer.println(line);
//Die Zeichenfolge an den Client ausgeben
Writer.flush();
//Aktualisieren Sie den Ausgabestream, damit der Client die Zeichenfolge sofort erhält
System.out.println("Server:"+line);
//Drucken Sie die gelesene Zeichenfolge auf der Standardausgabe des Systems
System.out.println("Client:"+in.readLine());
//Eine Zeichenfolge vom Client lesen und auf der Standardausgabe ausgeben
line=br.readLine();
//Eine Zeichenfolge aus der Standardeingabe des Systems lesen
} // Schleife fortsetzen
write.close(); //Schließe den Socket-Ausgabestream
in.close(); //Schließe den Socket-Eingabestream
socket.close(); //Socket schließen
server.close(); //ServerSocket schließen
}catch(Exception e) {//Error, Fehlermeldung ausgeben
System.out.println("Fehler."+e);
}
}
}
Ich hoffe, dass dieser Artikel für die Java-Programmierung aller hilfreich sein wird.