J'ai essayé la communication UDP avec Java

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.

Recevoir

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

Envoyer

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.

Édition supplémentaire

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

J'ai essayé la communication UDP avec Java
J'ai essayé d'interagir avec Java
J'ai essayé d'utiliser OpenCV avec Java + Tomcat
J'ai essayé de faire une authentification de base avec Java
J'ai essayé de casser le bloc avec java (1)
[Java] Communication JSON avec jackson
J'ai essayé DI avec Ruby
J'ai essayé d'utiliser Java REPL
J'ai essayé UPSERT avec PostgreSQL.
J'ai essayé BIND avec Docker
J'ai essayé la métaprogrammation avec Java
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
J'ai essayé OCR de traiter un fichier PDF avec Java
J'ai essayé d'implémenter Sterling Sort avec Java Collector
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé d'utiliser JOOQ avec Gradle
[K8s] J'ai essayé la communication entre les pods!
J'ai essayé l'analyse morphologique avec MeCab
J'ai essayé le framework Java "Quarkus"
J'ai essayé d'utiliser l'API Java8 Stream
Ce que j'ai appris avec Java Gold
J'ai essayé d'utiliser JWT en Java
J'ai essayé GraphQL avec Spring Boot
Essayez la communication bidirectionnelle avec gRPC Java
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé Flyway avec Spring Boot
Ce que j'ai appris avec Java Silver
J'ai essayé de résumer Java 8 maintenant
J'ai essayé OCR de traiter un fichier PDF avec Java part2
J'ai essayé de personnaliser Slim avec Scaffold
J'ai essayé d'utiliser la bibliothèque CameraX avec Android Java Fragment
J'ai essayé d'utiliser le mémo Java LocalDate
J'ai essayé d'utiliser Google HttpClient de Java
J'ai essayé de créer une application Android avec MVC maintenant (Java)
J'ai essayé d'utiliser l'API Elasticsearch en Java
J'ai essayé d'utiliser Realm avec Swift UI
J'ai essayé le mappeur d'objets de Cassandra pour Java
J'ai essayé de résumer les expressions Java lambda
Java9 était inclus, j'ai donc essayé jshell.
J'ai essayé de démarrer avec Web Assembly
J'ai essayé d'utiliser Scalar DL avec Docker
J'ai essayé le nouveau yuan à Java
Remarques sur la communication HTTP avec Java (OkHttp)
J'ai essayé d'utiliser OnlineConverter avec SpringBoot + JODConverter
J'ai essayé l'apprentissage de la gestion qui fait gagner du temps avec Studyplus.
J'ai essayé de jouer un peu avec BottomNavigationView ①
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
J'ai essayé l'examen d'entrée de Google (non officiel) [java]
J'ai essayé Spring.
J'ai essayé de mettre Tomcat
J'ai essayé youtubeDataApi.
J'ai essayé de refactoriser ①
J'ai essayé FizzBuzz.
J'ai essayé JHipster 5.1
J'ai essayé de mettre facilement Java sur mon Mac
J'ai essayé de vérifier AdoptOpenJDK 11 (11.0.2) avec l'image Docker
J'ai essayé de gérer la configuration des jambes de force avec Coggle
J'ai essayé de gérer les informations de connexion avec JMX
java j'ai essayé de casser un simple bloc