Maison  >  Article  >  Java  >  Explication détaillée d'exemples de communication réseau

Explication détaillée d'exemples de communication réseau

零下一度
零下一度original
2017-06-25 09:33:031552parcourir

Un aperçu

1. Modèle de réseau

OSI( Le modèle Open System Interconnection (Open System Interconnection) est un résumé de la structure du système réseau. Le réseau est divisé en sept couches : couche application, couche présentation, couche session, couche transport, couche réseau et données. couche lien, couche physique.

2. Protocole IP

Le protocole de couche réseau précise les règles d'identification et de recherche des ordinateurs sur Internet.

3. Protocole TCP

Un protocole de transmission de données au niveau de la couche transport La connexion est établie via une "prise de contact à trois" avant. transmission de données, puis L'envoi de données convient aux situations qui nécessitent une grande précision des données. Puisqu'une connexion doit être établie avant la transmission des données, la vitesse de transmission est lente.

4. Protocole UDP

Un protocole de transmission de données au niveau de la couche transport Il n'est pas nécessaire d'établir une connexion avant la transmission des données. est adapté à un traitement précis des données. Lorsque les exigences sexuelles ne sont pas élevées, la transmission des données est généralement les informations de discussion sont transmises via ce protocole.

5. Protocole HTTP

Le protocole HTTP est un protocole de couche application qui fournit une interface permettant au système d'exploitation ou aux applications réseau d'accéder au réseau services.

6. Port port

Lorsque les données parviennent à l'ordinateur, afin de retrouver l'application cible, une valeur entière est attribuée à chacune application. , avec une valeur de 0-65535, cette valeur entière est le port On peut voir que le port représente un programme d'application sur l'ordinateur, garantissant que les données atteignent avec précision le programme prédéterminé. Un port ne peut pas être occupé par plusieurs applications en même temps. Après la fin d'une application, le port ne sera pas libéré immédiatement. Il y a un temps d'occupation de la mémoire, qui est généralement très court. Les ports 0-1023 sont déjà occupés par des applications système et d'autres applications. Évitez d'utiliser des ports de cette plage lors de la conception du programme.

7. Socket Socket

Socket est un outil permettant d'envoyer et de recevoir des données. L'expéditeur envoie des données via le socket et le destinataire écoute le port spécifié via le socket pour obtenir des données.

8. Que le protocole TCP ou le protocole UDP soit utilisé, les données ne peuvent être envoyées que sous forme d'octets.

2 Programmation TCP

1. La fermeture du flux d'entrée ou du flux de sortie obtenu via le Socket fermera le Socket.

2. Le flux de sortie obtenu via le Socket doit être fermé une fois la sortie terminée, sinon le flux d'entrée correspondant à l'autre extrémité sera bloqué. Puisque lors de la fermeture du flux de sortie via l'objet du flux de sortie, ferme l'objet Socket en même temps, l'autre extrémité ne pourra pas obtenir l'objet correspondant au Socket. Par conséquent, le Le flux de sortie ne peut être fermé que via la méthode shutdownOutput sous Socket .

3. Étapes générales pour le 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. Étapes générales pour le serveur :

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.Démo

Client

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();
    }

}

Serveur

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();
    }

}

Trois programmation UDP

1. Méthode de traitement des données

🎜>

Le protocole UDP envoie des données sous forme de paquets, avec une valeur maximale de 64k par paquet.

2. Étapes générales pour l'envoi de données :
DatagramSocket socket=new DatagramSocket();//创建数据报套接字用于发送数据//DUP协议采用数据包分段发送数据,因此需要建立数据包,在数据包中指明目的地IP与端口DatagramPacket packet= DatagramPacket(byte buf[], int offset, int length,InetAddress address, int port);
socket.send(packet);

3. Étapes générales pour la réception de données :
DatagramSocket socket=new DatagramSocket(int port);//创建监听指定端口的数据报套接字DatagramPacket packet=new DatagramPacket(byte buf[], int length);
socket.receive(packet);


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn