Dieser Artikel verwendet Java 10.0.1, das auf WIN10 installiert ist.
Die Layer 4 (Transport) -Protokolle von OSI, TCP und UDP, werden häufig für die Kommunikation zwischen Systemen verwendet. Die Vorteile von TCP und UDP sind: TCP --Hohe Zuverlässigkeit UDP --Schnelle Geschwindigkeit Darüber hinaus können TCP und UDP zwischen Systemen kommunizieren. Ansonsten müssen einige E / A-Verarbeitungen für die zu übertragenden Daten durchgeführt werden, sodass auch eine E / A-Verarbeitungsmethode erforderlich ist. Hier werden häufig Blocking und (BIO) oder Non-Blocking (NIO) verwendet. Dieses Mal werde ich die Kommunikation zwischen Systemen mit TCP / IP + BIO implementieren.
Für die TCP-Kommunikation wird eine Bibliothek namens ** Socket ** verwendet. Wir stellen ** Socket ** und ** ServerSocket ** aus der Java-Sprache zur Verfügung, daher werden wir dieses Mal versuchen, TCP / IP + BIO mit diesen zu implementieren. (Die offizielle API finden Sie hier: Socket, ServerSocket /javase/jp/6/api/java/net/ServerSocket.html)) ** Serverseitige Datei (tatsächlich lokal) **
*** Erstellen Sie einen Socket und warten Sie auf clientseitigen Zugriff *** Inhalt der TcpServer-Datei:
import java.io.*;
import java.net.*;
public class TcpServer{
public static void main (String[] argv) throws Exception{
try (
//8001 Portnummer erstellen
ServerSocket server = new ServerSocket(8001);
FileOutputStream fos = new FileOutputStream("server_recv.txt");
FileInputStream fis = new FileInputStream("server_send.txt");
){
System.out.println("wait access...");
//Warten Sie auf den clientseitigen Zugriff
Socket socket = server.accept();
System.out.println("client access.");
int ch;
//Der von der Clientseite übergebene Stream ist Server_recv.Schreiben Sie in txt
InputStream input = socket.getInputStream();
while ((ch = input.read()) != 0) {
fos.write(ch);
}
// server_send.Übergeben Sie den in txt geschriebenen Inhaltsstrom an die Clientseite
OutputStream output = socket.getOutputStream();
while ((ch = fis.read()) != -1) {
output.write(ch);
}
//Zugriffsende
socket.close();
System.out.println("accsess closed.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
server_send.txt Dateiinhalt:
server_send
server_recv.txt ist eine leere Datei
** Clientseitige Dateien **
*** Erstellen Sie einen Socket und greifen Sie auf den angegebenen Server und Port zu. *** Inhalt der TcpClient-Datei:
import java.io.*;
import java.net.*;
public class TcpClient{
public static void main (String[] argv) throws Exception{
try (
//8001 Zugangsportnummer
Socket socket = new Socket("localhost", 8001);
FileOutputStream fos = new FileOutputStream("client_recv.txt");
FileInputStream fis = new FileInputStream("client_send.txt");
){
int ch;
// client_send.Übergeben Sie den in txt geschriebenen Inhaltsstrom an die Serverseite
OutputStream output = socket.getOutputStream();
while ((ch = fis.read()) != -1) {
output.write(ch);
}
//Übergeben Sie "Übertragung abgeschlossen!" An die Serverseite
output.write(0);
//Client der von der Serverseite übergebene Stream_recv.Schreiben Sie in txt
InputStream input = socket.getInputStream();
while ((ch = input.read()) != -1) {
fos.write(ch);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
client_send.txt Dateiinhalt:
client_send
client_recv.txt ist eine leere Datei
Kompilieren Sie TcpClient.java und TcpServer.java in Java und führen Sie sie in Java aus
Starten des Servers und Warten auf eine Verbindung auf der Clientseite:
PS C:\Users\ma\Documents\work\javaweb\1> java TcpServer
wait access...
Starten Sie den Client und greifen Sie auf die Serverseite zu:
PS C:\Users\ma\Documents\work\javaweb\1> java TcpClient
Der Server wird beendet, nachdem die Verbindung vom Client verarbeitet wurde:
PS C:\Users\ma\Documents\work\javaweb\1> java TcpServer
wait access...
client access.
accsess closed.
PS C:\Users\ma\Documents\work\javaweb\1>
server_recv.txt Dateiinhalt:
client_send
Ich konnte überprüfen, ob der von der Clientseite (client_send.txt) übergebene Inhalt überschrieben wurde.
client_recv.txt hat auch den von der Serverseite übergebenen Inhalt (server_send.txt) überschrieben:
server_send
Dieses Mal habe ich mithilfe der Java-Bibliotheken Socket und ServerSocket einen TCP / IP + BIO-Übertragungspfad erstellt. Wir haben auch überprüft, dass Daten bidirektional zwischen dem Server und dem Client gesendet werden können.