J'ai essayé d'implémenter TCP / IP + BIO avec JAVA

Cet article utilise Java 10.0.1 installé sur WIN10.

introduction

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.

La mise en oeuvre#

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

Courir

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>

Vérification des résultats

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

Résumé

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.

référence#

  1. Kazuya Maebashi, 2016. Introduction au développement d'applications Web à partir des bases.

Recommended Posts

J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
Essayez d'implémenter TCP / IP + NIO avec JAVA
J'ai essayé d'interagir avec Java
J'ai essayé d'implémenter Sterling Sort avec Java Collector
J'ai essayé de faire une authentification de base avec Java
J'ai essayé de casser le bloc avec java (1)
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
J'ai essayé d'implémenter la notification push Firebase en Java
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
[Java] J'ai essayé de mettre en œuvre la recherche de produits de l'API Yahoo
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
J'ai essayé la communication UDP avec Java
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé de résumer Java 8 maintenant
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
[Rails] J'ai essayé d'implémenter le traitement par lots avec la tâche Rake
Je veux implémenter diverses fonctions avec kotlin et java!
J'ai essayé de résumer les expressions Java lambda
J'ai essayé de démarrer avec Web Assembly
J'ai essayé d'implémenter la fonction de prévisualisation d'image avec Rails / jQuery
J'ai essayé d'implémenter un mappage OU flexible avec MyBatis Dynamic SQL
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé d'utiliser OpenCV avec Java + Tomcat
J'ai essayé de créer une application Android avec MVC maintenant (Java)
J'ai essayé de vérifier AdoptOpenJDK 11 (11.0.2) avec l'image Docker
J'ai essayé d'implémenter des relations polymorphes à Nogizaka.
J'ai essayé de gérer la configuration des jambes de force avec Coggle
J'ai essayé de gérer les informations de connexion avec JMX
java j'ai essayé de casser un simple bloc
Je veux utiliser java8 forEach avec index
J'ai essayé de sortir quatre-vingt-dix-neuf en Java
J'ai essayé de créer une compétence Alexa avec Java
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé d'implémenter une fonction équivalente à Felica Lite avec HCE-F d'Android
[Java] J'ai essayé de me connecter en utilisant le pool de connexion avec Servlet (tomcat) & MySQL & Java
J'ai essayé ce que je voulais essayer avec Stream doucement.
J'ai essayé de lire et de sortir CSV avec Outsystems
[Java] J'ai essayé de résoudre le problème de rang B de Paiza
J'ai essayé de faire fonctionner SQS en utilisant AWS Java SDK
# 2 [Note] J'ai essayé de calculer quatre-vingt-dix-neuf avec Java.
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
J'ai essayé de démarrer avec Spring Data JPA
J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé de dessiner une animation avec l'API Blazor + canvas
J'ai essayé OCR de traiter un fichier PDF avec Java
Je veux faire des transitions d'écran avec kotlin et java!
~ J'ai essayé d'apprendre la programmation fonctionnelle avec Java maintenant ~
J'avais l'habitude de faire nc (netcat) avec JAVA normalement
J'ai essayé de découvrir ce qui avait changé dans Java 9
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
[Swift] J'ai essayé d'implémenter une interface utilisateur semblable à un profil Instagram avec UICollectionView avec juste du code sans storyboard
[Azure] J'ai essayé de créer une application Java gratuitement ~ Se connecter avec FTP ~ [Débutant]
J'ai essayé DI avec Ruby
Java pour jouer avec Function
J'ai essayé Drools (Java, InputStream)