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