L'Internet Protocol Suite contient tous les types de protocoles qui permettent la communication entre les appareils sur Internet. UDP est l'un des protocoles de cette suite, et sa forme complète est User Datagram Protocol. Contrairement à TCP, il n’est pas fiable et il s’agit d’un protocole sans connexion. Il n'établit aucun type de connexion avec d'autres appareils avant d'envoyer des données.
Dans cet article, nous allons développer une simple calculatrice client-serveur utilisant UDP en Java. Le client demande une opération et le serveur calcule et envoie le résultat au périphérique client.
Commençons par comprendre brièvement quelques concepts de base sur les réseaux Java−
Une adresse IP est un numéro non signé de 32 ou 128 bits qui identifie de manière unique un appareil sur Internet. Il est plus facile de mémoriser le nom d'un hôte IP que l'adresse numérique. Par conséquent, nous devons utiliser la classe « InetAddress » pour l’encapsuler. Nous utilisons sa méthode intégrée "getLocalHost()" pour obtenir l'adresse IP de l'hôte local.
Ce sont de petits paquets contenant des données qui peuvent être transmises entre deux machines via Internet. Java implémente deux classes pour établir une connexion UDP -
La classeDatagramSocket est utilisée pour envoyer et recevoir des paquets de datagrammes. Il détermine également la destination de ces colis. Ses méthodes intégrées ‘send()’ et ‘receive()’ sont utilisées respectivement pour envoyer et recevoir des paquets de données.
DatagramSocket nameOfObject = new DatagramSocket();Les objets de la classe
DatagramPacket stockent les données à envoyer.
DatagramPacket nameOfPacket = new DatagramPacket();
Nous commençons par importer les deux packages les plus importants nommés 'java.net', qui est utilisé pour accéder à toutes les classes liées aux réseaux Java, et 'java.io', qui est utilisé pour les flux d'entrée et de sortie. Utilisez le package ‘java.util’ pour utiliser la classe ‘Scanner’.
Établissez une connexion UDP et obtenez l'adresse de l'hôte local.
Maintenant, à l'intérieur du bloc try, nous demanderons la saisie de l'utilisateur via les méthodes 'send()' et 'receive()' de la classe 'DatagramSocket' pour demander l'opération et recevoir le résultat en conséquence.
import java.io.*; import java.net.*; import java.util.*; public class ClientCalc { public static void main(String args[]) throws IOException { Scanner inp = new Scanner(System.in); // making UDP connection DatagramSocket datagsokt = new DatagramSocket(); // fetching the localhost address InetAddress addr = InetAddress.getLocalHost(); byte strm[] = null; try { while (true) { System.out.println("Type 1 for Addition"); System.out.println("Type 2 for Subtraction"); System.out.println("Type 3 for Multiplication"); System.out.println("Type 4 for Division"); System.out.println("Enter your choice: "); String oprtr = inp.nextLine(); // to convert the user choice to byte strm = new byte[256]; strm = oprtr.getBytes(); // creating datagram packet to send to server DatagramPacket packtsend = new DatagramPacket(strm, strm.length, addr, 6666); datagsokt.send(packtsend); // Type 0 for cut the connection if (oprtr.equals("0")) { break; } // to receive the result from server strm = new byte[256]; DatagramPacket packtrec = new DatagramPacket(strm, strm.length); datagsokt.receive(packtrec); // display the result System.out.println("Your Result for the given operation = " + new String(strm, 0, strm.length)); } } // to handle exception catch(Exception exp) { System.out.println(exp); } } }
Tout d'abord, établissez une connexion avec le client et définissez deux objets de la classe DatagramPacket pour envoyer et recevoir des paquets de données en utilisant les méthodes "send()" et "receive()" de la classe "DatagramSocket".
À l'intérieur du bloc try, nous recevons la demande du client, puis utilisons switch case pour effectuer l'opération et envoyer le résultat à l'appareil client.
import java.io.*; import java.net.*; class ServerCalc { public static void main(String[] args) throws IOException { // making connection to client DatagramSocket datagsokt = new DatagramSocket(6666); byte[] strm = null; DatagramPacket packtrec = null; DatagramPacket packtsend = null; try { while (true) { strm = new byte[256]; // to receive the packet from client packtrec = new DatagramPacket(strm, strm.length); datagsokt.receive(packtrec); String oprtr = new String(strm, 0, strm.length); System.out.println("Client has requested for " + oprtr ); int data1 = 15; int data2 = 5; int tot = 0; char opt = oprtr.charAt(0); switch(opt) { case '1' : tot = data1 + data2; break; case '2' : tot = data1 - data2; break; case '3' : tot = data1 * data2; break; case '4' : tot = data1 / data2; break; default : break; } // Converting the string result to integer String res = Integer.toString(tot); // converting the integer to bytes strm = res.getBytes(); int port = packtrec.getPort(); // getting port number // sending final result in the form of datagram packet packtsend = new DatagramPacket(strm, strm.length, InetAddress.getLocalHost(), port); datagsokt.send(packtsend); } } // to handle exception catch(Exception exp) { System.out.println(exp); } } }
Pour exécuter les deux programmes en même temps, ouvrez les deux cmd simultanément sur votre ordinateur local. Sur la première interface cmd, compilez et exécutez le programme côté serveur, puis exécutez le programme client sur l'autre interface.
D:\Java Programs>java ClientCalc Type 1 for Addition Type 2 for Subtraction Type 3 for Multiplication Type 4 for Division Enter your choice: 1 Your Result for the given operation = 20
D:\Java Programs>java ServerCalc Client has requested for 1
Lorsque nous entrons 0, la connexion sera terminée et le programme cessera de s'exécuter.
Dans cet article, nous avons découvert quelques concepts de base des réseaux Java. De plus, nous avons discuté des programmes côté serveur et côté client pour une simple calculatrice utilisant UDP. Nous avons découvert comment établir une connexion entre les périphériques client et serveur à l'aide de Java.
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!