J'ai étudié comment faire la communication UDP avec Java. Je savais comment utiliser DatagramSocket
, mais cette fois, j'ai étudié comment utiliser java.nio.
Tout d'abord, écrivons le code à recevoir, en supposant que vous savez que le message UDP sera envoyé.
//Créer un canal UDP
DatagramChannel channel = DatagramChannel.open();
//Recevoir les messages UDP adressés au port 9999
channel.socket().bind(new InetSocketAddress(9999));
//Préparez un tampon pour recevoir les messages.
//Si le message est plus grand que la mémoire tampon, le message qui ne tient pas est ignoré.
ByteBuffer buf = ByteBuffer.allocate(453);
buf.clear();
//Attendez que le message soit reçu
channel.receive(buf);
//Octet de données[]Recevoir à
buf.flip();
byte[] data = new byte[buf.limit()];
buf.get(data);
Ensuite, écrivons le code de l'expéditeur.
//Créer un canal UDP
DatagramChannel channel = DatagramChannel.open();
//Envoyer des messages UDP depuis le port 9999
channel.socket().bind(new InetSocketAddress(9999));
//Faites les données à envoyer sous la forme de ByteBuffer.
//Ici String->byte[]->Converti en ByteBuffer.
String newData = "New String to write to file..." + System.currentTimeMillis();
ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip();
//Envoyer
int bytesSent = channel.send(buf, new InetSocketAddress("127.0.0.1", 41234));
Il en est de même lors de la réception et de l'envoi, jusqu'au point de créer un DatagramChannel
et de lier le socket. Ensuite, convertissez le contenu que vous souhaitez envoyer et recevoir en ByteBuffer
et échangez.
Je souhaite implémenter moi-même un protocole de bas niveau! Si ce n'est pas le cas, je pense qu'il peut être utilisé à des fins générales pour convertir le contenu du message en une chaîne de caractères en utilisant une méthode telle que JSON et l'envoyer en tant que String
->byte []
-> ByteBuffer
. ..
Pour la communication entre les applications Java, ObjectInputStream et ObjectOutputStream Il est également possible d'échanger directement des objets arbitraires en utilisant (/io/ObjectOutputStream.html).
Veuillez noter qu'UDP ne garantit pas que le message atteindra correctement l'autre partie comme TCP, donc ** il ne provoquera pas d'erreur même s'il n'arrive pas. ** Il peut donc être difficile de trouver si vous faites une erreur dans votre code lors du débogage.
D'ailleurs, avec Node.js, envoyer et recevoir UDP est si simple.
Recevoir
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
//Attendez la réception sur le port 9999
server.bind(9999);
Envoyer
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.send('Hello', 9999, '127.0.0.1', (err, bytes) => {
console.log(err, bytes)
});
Lors du débogage de la partie d'envoi / réception de message UDP d'une application Java, il peut être pratique d'écrire un programme de test dans Node.js pour l'envoi de messages temporaires.
Recommended Posts