Ich habe versucht, TCP / IP + BIO mit JAVA zu implementieren

Dieser Artikel verwendet Java 10.0.1, das auf WIN10 installiert ist.

Einführung

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.

Implementierung#

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

Lauf

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>

Ergebnisüberprüfung

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

Zusammenfassung

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.

Referenz#

  1. Kazuya Maebashi. 2016. Einführung in die Entwicklung von Webanwendungen aus den Grundlagen. Technical Review Company.

Recommended Posts

Ich habe versucht, TCP / IP + BIO mit JAVA zu implementieren
Versuchen Sie, TCP / IP + NIO mit JAVA zu implementieren
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Ich habe versucht, die Firebase-Push-Benachrichtigung in Java zu implementieren
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
[Java] Ich habe versucht, die Yahoo API-Produktsuche zu implementieren
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Ich habe versucht, UDP mit Java zu kommunizieren
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Ich habe jetzt versucht, Java 8 zusammenzufassen
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Ich habe versucht, mit Web Assembly zu beginnen
Ich habe versucht, die Bildvorschau mit Rails / jQuery zu implementieren
Ich habe versucht, eine flexible ODER-Zuordnung mit MyBatis Dynamic SQL zu implementieren
Ich habe versucht, das Iterator-Muster zu implementieren
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Ich habe versucht, eine Android-Anwendung mit MVC zu erstellen (Java)
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
Ich habe versucht, polymorph in Nogizaka zu implementieren.
Ich habe versucht, die Federbeinkonfiguration mit Coggle zu verwalten
Ich habe versucht, Anmeldeinformationen mit JMX zu verwalten
Java Ich habe versucht, einen einfachen Block zu brechen
Ich möchte Java8 für jeden mit Index verwenden
Ich habe versucht, neunundneunzig in Java auszugeben
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Ich habe versucht, einen Server mit Netty zu implementieren
Ich habe versucht, mit HCE-F von Android eine Funktion zu implementieren, die Felica Lite entspricht
[Java] Ich habe versucht, über den Verbindungspool eine Verbindung mit Servlet (Tomcat) & MySQL & Java herzustellen
Ich habe versucht, was ich mit Stream leise versuchen wollte.
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
[Java] Ich habe versucht, Paizas B-Rang-Problem zu lösen
Ich habe versucht, SQS mit AWS Java SDK zu betreiben
# 2 [Anmerkung] Ich habe versucht, neunundneunzig mit Java zu berechnen.
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich habe versucht, mit Spring Data JPA zu beginnen
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich habe versucht, Animationen mit der Blazor + Canvas-API zu zeichnen
Ich habe versucht, mit OCR eine PDF-Datei mit Java zu verarbeiten
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
~ Ich habe jetzt versucht, funktionale Programmierung mit Java zu lernen ~
Ich habe nc (netcat) normalerweise mit JAVA gemacht
Ich habe versucht herauszufinden, was sich in Java 9 geändert hat
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
[Swift] Ich habe versucht, mit UICollectionView eine Instagram-ähnliche Benutzeroberfläche mit nur Code ohne Storyboard zu implementieren
[Azure] Ich habe versucht, eine kostenlose Java-App zu erstellen ~ Mit FTP verbinden ~ [Anfänger]
Ich habe DI mit Ruby versucht
Java zum Spielen mit Function
Ich habe Drools (Java, InputStream) ausprobiert.