Heim  >  Artikel  >  Java  >  Ausführliche Erläuterung von Beispielen zur Netzwerkkommunikation

Ausführliche Erläuterung von Beispielen zur Netzwerkkommunikation

零下一度
零下一度Original
2017-06-25 09:33:031599Durchsuche

Ein Überblick

1. Netzwerkmodell

OSI( Das Open System Interconnection-Modell (Open System Interconnection) ist eine Zusammenfassung der Netzwerksystemstruktur. Das Netzwerk ist in sieben Schichten unterteilt: Anwendungsschicht, Präsentationsschicht, Sitzungsschicht, Transportschicht, Netzwerkschicht und Daten Link. Schicht, physikalische Schicht.

2. IP-Protokoll

Das Netzwerkschichtprotokoll legt die Regeln zum Identifizieren und Finden von Computern im Internet fest.

3. TCP-Protokoll

Ein Datenübertragungsprotokoll auf der Transportschicht. Die Verbindung wird zuvor durch einen „Drei-Wege-Handshake“ hergestellt Die Datenübertragung und das anschließende Senden von Daten eignen sich für Situationen, die eine hohe Datengenauigkeit erfordern. Da vor der Datenübertragung eine Verbindung hergestellt werden muss, ist die Übertragungsgeschwindigkeit langsam.

4. UDP-Protokoll

Ein Datenübertragungsprotokoll auf der Transportschicht. Es ist nicht erforderlich, vor der Datenübertragung eine Verbindung herzustellen eignet sich für eine genaue Datenverarbeitung. Wenn die sexuellen Anforderungen nicht hoch sind, erfolgt die Datenübertragung im Allgemeinen schneller. Chat-Informationen werden über dieses Protokoll übertragen.

5. HTTP-Protokoll

Das HTTP-Protokoll ist ein Protokoll der Anwendungsschicht, das eine Schnittstelle für Betriebssysteme oder Netzwerkanwendungen für den Zugriff auf Netzwerkdienste bereitstellt .

6. Port-Port

Wenn die Daten den Computer erreichen, wird jedem ein ganzzahliger Wert zugewiesen, um die Zielanwendung zu finden Anwendung. Mit einem Wert von 0-65535 ist dieser ganzzahlige Wert der Port . Es ist ersichtlich, dass der Port ein Anwendungsprogramm auf dem Computer darstellt und sicherstellt, dass die Daten das vorgegebene Programm genau erreichen. Ein Port kann nicht von mehreren Anwendungen gleichzeitig belegt werden. Nach dem Ende einer Anwendung wird der Port nicht sofort freigegeben. Es gibt eine Speicherverzögerungszeit, die im Allgemeinen sehr kurz ist. Ports 0-1023 sind bereits von Systemanwendungen und anderen Anwendungen belegt. Vermeiden Sie die Verwendung von Ports in diesem Bereich während des Programmdesigns.

7. Socket Socket

Socket ist ein Tool zum Senden und Empfangen von Daten. Der Absender sendet Daten über den Socket, und der Empfänger lauscht über den Socket auf den angegebenen Port, um Daten zu erhalten.

8. Unabhängig davon, ob das TCP-Protokoll oder das UDP-Protokoll verwendet wird, können Daten nur in Byteform gesendet werden.

2 TCP-Programmierung

1. Durch das Schließen des über den Socket erhaltenen Eingabe- oder Ausgabestreams wird der Socket geschlossen.

2. Der über den Socket erhaltene Ausgabestream muss nach Abschluss der Ausgabe geschlossen werden, andernfalls wird der entsprechende Eingabestream am anderen Ende blockiert. Da beim Schließen des Ausgabestreams über das Ausgabestream-Objekt gleichzeitig das Socket-Objekt schließt, kann das andere Ende das dem Socket entsprechende Objekt nicht abrufen. Daher ist das Der Ausgabestream kann nur über die Methode „shutdownOutput“ unter dem Socket geschlossen werden.

3. Allgemeine Schritte für den Client:

Socket socket=new Socket(String host,int port);//创建客户端Socket,发送与接收数据,需要指明服务器IP与端口OutputStream os=socket.getOutputStream();//获取输出流,向服务器发送数据..........
os.flush();
socket.shutdownOutput();//关闭输出流,防止服务器端阻塞InputStream is=socket.getInputStream();//获取输入流,输入流包含服务器的反馈信息............

socket.close();//关闭socket,同时关闭输入与输出流

4. Allgemeine Schritte für den Server:

ServerSocket server=new ServerSocket(int port);//建立服务器端套接字,指定监听端口Socket socket=server.accept();//获取访问客户端的Socket,阻塞线程InputStream is=socket.getInputStream();//获取输入流,其中包含客户端发送的数据.............

OutputStream os=socket.getOutputStream();//获取输出流,向客户端反馈信息..............
os.flush();
os.shutdownOutput();

server.close();

5.Demo

Kunde

package com.javase.networkCommunication.tcp.demo02;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class ImgClient {public static void main(String[] args) throws UnknownHostException, IOException {
        Socket socket = new Socket("192.168.146.1", 10007);
        FileInputStream is = new FileInputStream("Files/1.jpg");
        OutputStream os = socket.getOutputStream();byte[] buf = new byte[1024];// 先将数据读取到缓冲区,比频繁的从硬盘读取速度快int length = 0;while ((length = is.read(buf)) != -1) {
            os.write(buf, 0, length);
        }
        os.flush();
        socket.shutdownOutput();// 如果输出流不关闭,服务端对应的输入流会阻塞InputStream replyIs = socket.getInputStream();//不会阻塞线程byte[] buf01 = new byte[1024];int length01 = replyIs.read(buf01);
        String reply = new String(buf01, 0, length01);
        System.out.println(reply);
        
        is.close();
        socket.close();
    }

}

Server

package com.javase.networkCommunication.tcp.demo02;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import org.junit.Test;public class ImgServer {

    @Testpublic void test01() throws IOException {
        ServerSocket serverSocket = new ServerSocket(10007);
        Socket socket = serverSocket.accept();// 线程阻塞,等待请求System.out.println("hostAddress=" + socket.getInetAddress().getHostAddress());
        InputStream is = socket.getInputStream();
        FileOutputStream os = new FileOutputStream("Files/2.jpg");
        System.out.println(1);byte[] buf = new byte[1024];int length = 0;
        System.out.println(2);int count = 3;while ((length = is.read(buf)) != -1) {
            os.write(buf, 0, length);
            System.out.println(count++);
        }
        os.flush();
        os.close();
        System.out.println("图片上传结束");/*PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        out.write("success");*/OutputStream out = socket.getOutputStream();
        out.write("success".getBytes());
        out.flush();
        socket.shutdownOutput();
        System.out.println("响应数据已发出");
        
        serverSocket.close();
    }

}

Drei UDP-Programmierung

1. Datenverarbeitungsmethode

Das UDP-Protokoll sendet Daten in Form von Paketen mit einem Maximalwert von 64.000 pro Paket.

2. Allgemeine Schritte zum Senden von Daten:

DatagramSocket socket=new DatagramSocket();//创建数据报套接字用于发送数据//DUP协议采用数据包分段发送数据,因此需要建立数据包,在数据包中指明目的地IP与端口DatagramPacket packet= DatagramPacket(byte buf[], int offset, int length,InetAddress address, int port);
socket.send(packet);

3. Allgemeine Schritte zum Empfangen von Daten:

DatagramSocket socket=new DatagramSocket(int port);//创建监听指定端口的数据报套接字DatagramPacket packet=new DatagramPacket(byte buf[], int length);
socket.receive(packet);


Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung von Beispielen zur Netzwerkkommunikation. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn