Communication socket basée sur le protocole UDP


Introduction à cette section :

Cette section vous présente la dernière section de Socket : Communication Socket basée sur le protocole UDP. Dans la première section, nous avons expliqué en détail. En comparant les différences entre les deux, la plus grande différence entre TCP et UDP réside dans la nécessité pour le client d'établir une connexion avec le serveur avant de continuer. Transmission de données, si vous avez appris TCP dans les deux premières sections, ouvrez d'abord le serveur avant la transmission, acceptez, attendez que le client accède, puis obtenez Le socket client effectue ensuite les opérations d'E/S, mais UDP n'utilise pas les datagrammes comme support de transmission des données. Tout d'abord, les données transmises doivent être définies sous forme de datagramme (Datagram) et le socket (adresse hôte) auquel les données doivent arriver est spécifié dans le datagramme. et numéro de port), puis j'envoie les données sous forme de datagrammes, et il n'y a plus rien. Si le serveur ne peut pas les recevoir, je le ferai. Je ne sais pas, à moins que le serveur m'envoie un datagramme de confirmation après l'avoir reçu ~ Je n'écrirai pas un autre exemple Android en raison de contraintes de temps. Entrez directement le code Java~


1. Étapes d'implémentation côté serveur :

Étape 1 : Créez DatagramSocket et spécifiez le port. numéro
Étape 2 : Créer un DatagramPacket
Étape 3 : Recevoir les informations sur les données envoyées par le client
Étape 4 : Lire les données

Exemple de code :

public class UPDServer {
    public static void main(String[] args) throws IOException {
        /*
         * 接收客户端发送的数据
         */
        // 1.创建服务器端DatagramSocket,指定端口
        DatagramSocket socket = new DatagramSocket(12345);
        // 2.创建数据报,用于接收客户端发送的数据
        byte[] data = new byte[1024];// 创建字节数组,指定接收的数据包的大小
        DatagramPacket packet = new DatagramPacket(data, data.length);
        // 3.接收客户端发送的数据
        System.out.println("****服务器端已经启动,等待客户端发送数据");
        socket.receive(packet);// 此方法在接收到数据报之前会一直阻塞
        // 4.读取数据
        String info = new String(data, 0, packet.getLength());
        System.out.println("我是服务器,客户端说:" + info);

        /*
         * 向客户端响应数据
         */
        // 1.定义客户端的地址、端口号、数据
        InetAddress address = packet.getAddress();
        int port = packet.getPort();
        byte[] data2 = "欢迎您!".getBytes();
        // 2.创建数据报,包含响应的数据信息
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
        // 3.响应客户端
        socket.send(packet2);
        // 4.关闭资源
        socket.close();
    }
}

2. Étapes de mise en œuvre du client :

Étape 1 : Définition Envoyer des informations
Étape 2 : Créer un DatagramPacket, contenant les informations à envoyer
Étape 3 : Créer un DatagramSocket
Étape 4 : Envoyer des données

public class UDPClient {
    public static void main(String[] args) throws IOException {
        /*
         * 向服务器端发送数据
         */
        // 1.定义服务器的地址、端口号、数据
        InetAddress address = InetAddress.getByName("localhost");
        int port = 8800;
        byte[] data = "用户名:admin;密码:123".getBytes();
        // 2.创建数据报,包含发送的数据信息
        DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
        // 3.创建DatagramSocket对象
        DatagramSocket socket = new DatagramSocket();
        // 4.向服务器端发送数据报
        socket.send(packet);

        /*
         * 接收服务器端响应的数据
         */
        // 1.创建数据报,用于接收服务器端响应的数据
        byte[] data2 = new byte[1024];
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
        // 2.接收服务器响应的数据
        socket.receive(packet2);
        // 3.读取数据
        String reply = new String(data2, 0, packet2.getLength());
        System.out.println("我是客户端,服务器说:" + reply);
        // 4.关闭资源
        socket.close();
    }
}

Résumé de cette section :

Le contenu de cette section est relativement simple. Il ne s'agit que de convertir des données en octets puis de les placer dans DatagramPacket. (paquet de datagramme), envoyé Lors de la réception, apportez l'adresse IP et le numéro de port du destinataire, et lors de la réception, utilisez un tableau d'octets pour mettre en cache ! Lors de l'envoi, vous devez créer un objet DatagramSocket (classe de communication de bout en bout), puis appeler la méthode d'envoi pour envoyer le paquet de datagramme au destinataire~ Le code de cette section provient d'un tutoriel JavaSocket sur Muke.com~ Si vous êtes intéressé, vous pouvez y jeter un œil : Application Java Socket---C'est ainsi que se pratique la communication