Cet article utilise Java 10.0.1 installé sur WIN10.
Les protocoles de couche 4 (transport) d'OSI, TCP et UDP, sont souvent utilisés pour communiquer entre les systèmes. Les avantages de TCP et UDP sont: TCP --Grande fiabilité UDP --Vitesse rapide De plus, TCP et UDP peuvent communiquer entre les systèmes, mais à part cela, certains traitements d'E / S doivent être effectués sur les données à communiquer, donc une méthode de traitement d'E / S est également nécessaire. Le blocage et (BIO) ou non bloquant (NIO) sont souvent utilisés ici. Cette fois, je vais implémenter la communication entre les systèmes avec TCP / IP + BIO.
Pour la communication TCP, utilisez une bibliothèque appelée ** Socket **. Nous fournissons ** Socket ** et ** ServerSocket ** à partir du langage Java, donc cette fois nous allons essayer d'implémenter TCP / IP + BIO en utilisant ces derniers. (L'API officielle est ici: Socket, ServerSocket /javase/jp/6/api/java/net/ServerSocket.html)) ** Fichier côté serveur (en fait local) **
*** Créez une socket et écoutez l'accès côté client *** Contenu du fichier TcpServer:
import java.io.*;
import java.net.*;
public class TcpServer{
public static void main (String[] argv) throws Exception{
try (
//8001 Créer un numéro de port
ServerSocket server = new ServerSocket(8001);
FileOutputStream fos = new FileOutputStream("server_recv.txt");
FileInputStream fis = new FileInputStream("server_send.txt");
){
System.out.println("wait access...");
//Attendez l'accès côté client
Socket socket = server.accept();
System.out.println("client access.");
int ch;
//Le flux passé du côté client est serveur_recv.Ecrire en txt
InputStream input = socket.getInputStream();
while ((ch = input.read()) != 0) {
fos.write(ch);
}
// server_send.Passer le flux de contenu écrit en txt au côté client
OutputStream output = socket.getOutputStream();
while ((ch = fis.read()) != -1) {
output.write(ch);
}
//Fin d'accès
socket.close();
System.out.println("accsess closed.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
server_send.txt Contenu du fichier:
server_send
server_recv.txt est un fichier vide
** Fichiers côté client **
*** Créez une socket et accédez au serveur et au port spécifiés *** Contenu du fichier TcpClient:
import java.io.*;
import java.net.*;
public class TcpClient{
public static void main (String[] argv) throws Exception{
try (
//8001 Numéro de port d'accès
Socket socket = new Socket("localhost", 8001);
FileOutputStream fos = new FileOutputStream("client_recv.txt");
FileInputStream fis = new FileInputStream("client_send.txt");
){
int ch;
// client_send.Passer le flux de contenu écrit en txt au côté serveur
OutputStream output = socket.getOutputStream();
while ((ch = fis.read()) != -1) {
output.write(ch);
}
//Passez "Transfert terminé!" Au côté serveur
output.write(0);
//Client le flux passé du côté serveur_recv.Ecrire en txt
InputStream input = socket.getInputStream();
while ((ch = input.read()) != -1) {
fos.write(ch);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
client_send.txt Contenu du fichier:
client_send
client_recv.txt est un fichier vide
Compilez respectivement TcpClient.java et TcpServer.java en javac et exécutez en java
--Exécuter TcpServer.class
Démarrage du serveur et attente d'une connexion côté client:
PS C:\Users\ma\Documents\work\javaweb\1> java TcpServer
wait access...
--Exécuter TcpClient.class
Démarrez le client et accédez au côté serveur:
PS C:\Users\ma\Documents\work\javaweb\1> java TcpClient
Le serveur se termine après avoir traité la connexion du côté client:
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 Contenu du fichier:
client_send
J'ai pu vérifier que le contenu passé du côté client (client_send.txt) est écrasé.
client_recv.txt a également écrasé le contenu (server_send.txt) passé du côté serveur:
server_send
Cette fois, j'ai créé un chemin de transfert TCP / IP + BIO en utilisant les bibliothèques Java Socket et ServerSocket. Nous avons également vérifié que les données peuvent être envoyées de manière bidirectionnelle entre le serveur et le client.
Recommended Posts