Heim >Java >javaLernprogramm >Lernen der Java-Tcp-Protokoll-Socket-Programmierung
Die wichtigsten Schritte, die ich gelernt habe
Der erste Schritt: Erstellen Sie ein neues Socket-Objekt mit einem bestimmten Port (z. B. 4800)
Der zweite Schritt: Erstellen Sie ein BufferedReader-Objekt mit dem Systemeingabegerät, das wird verwendet, um die Systemzeicheneingabe von der Tastatur zu empfangen
Schritt 3: Holen Sie sich den Ausgabestream vom Socket-Objekt, um den PrintWriter zu erstellen
Schritt 4: Holen Sie sich den Eingabestream vom Socket-Objekt, um das entsprechende BufferedReader-Objekt zu erstellen, die zum Empfangen der vom Server gesendeten Daten 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:
package com.fan.socket;
import java.io.*;
import java.net.Socket;
public class SocketClient {
public static void main(String[] args) throws IOException{
try{
Socket socket=new Socket("127.0.0.1",4800 ) ;
System.out.println("client start ...");
//Sende eine Client-Anfrage an den 4800-Port dieser Maschine
BufferedReader br=new BufferedReader(new InputStreamReader(System. in)) ;
//Konstruieren Sie das BufferedReader-Objekt aus dem Standardeingabegerät des Systems
PrintWriter write=new PrintWriter(socket.getOutputStream());
//Rufen Sie den Ausgabestream vom Socket-Objekt ab und erstellen Sie es das PrintWriter-Objekt
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", 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 sie sofort empfängt Diese Zeichenfolge
System.out.println("Client:"+readline);
//Drucken Sie die gelesene Zeichenfolge auf der Systemstandardausgabe
System.out.println(" Server:"+ in.readLine());
//Liest einen String vom Server und druckt ihn auf die Standardausgabe
readline=br.readLine(); //Liest einen String aus der Standardeingabe des Systems
} //Weiter zur Schleife
write.close(); //Schließe den Socket-Ausgabestream
in.close(); //Schließe den Socket-Eingabestream
socket.close(); //Schließe den Socket
}catch(Exception e) {
System.out.println("can not listen to:"+e);//Fehler, Fehlermeldung drucken
}
}
}
Servercode-Implementierung:
Paket com.fan.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketService {
public static void main( String[] args) throws IOException{
SocketService socketService = new SocketService();
socketService.oneServer();
}
public void oneServer(){
try{
ServerSocket server=null;
try{
server=new ServerSocket(4800);
System.out.println("server start is ok...");
//Einen ServerSocket erstellen, der auf Client-Anfragen auf Port 4800 lauscht
}catch(Exception e) {
System.out.println("can not listen to:"+e);
//Error, Fehlermeldung drucken
}
Socket socket=null;
try{
socket=server.accept();
//Verwenden Sie Accept(), um Kundenanfragen zu blockieren und auf sie zu warten ist ein Kunde
//Die Anforderung wird als Socket-Objekt generiert und weiterhin ausgeführt
}catch(Exception e) {
System.out.println("Error."+e);
//Fehler, Fehlermeldung drucken
}
String line;
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//Den Eingabestream vom Socket abrufen Objekt und erstellen Sie das entsprechende BufferedReader-Objekt
PrintWriterwriter=new PrintWriter (socket.getOutputStream());
//Holen Sie sich den Ausgabestream vom Socket-Objekt und erstellen Sie das PrintWriter-Objekt
BufferedReader br=new BufferedReader( new InputStreamReader(System.in));
//Nach dem Systemstandard Das Eingabegerät erstellt ein BufferedReader-Objekt
System.out.println("Client:"+in.readLine());
/ /Drucken Sie die vom Client gelesene Zeichenfolge auf der Standardausgabe
line=br .readLine();
//Lesen Sie eine Zeichenfolge aus der Standardeingabe
while(!line.equals("end")){
//Wenn die Zeichenfolge „Ende“ ist, stoppen Sie die Schleife
writer.println(line);
//Geben Sie die Zeichenfolge an den Client aus
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 Systemstandardausgabe
System.out. println("Client:"+in.readLine( ));
//Eine Zeichenfolge vom Client lesen und auf der Standardausgabe ausgeben
line=br.readLine();
//Einen lesen Zeichenfolge aus der Systemstandardeingabe
} //Schleife fortsetzen
writer.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) {//Fehler, Fehlermeldung drucken
System.out.println(" Fehler