一. 服务端代码 :
importer java.io. *; importer java.net. *; classe publique udpeChoServer {private static final int eChomax = 255; // Taille maximale d'Echo datagram public static void main (String [] args) lève ioException {int servport = 5500; // Port de serveur DatagramSocket Socket = new DatagramSocket (servport); Datagrampacket Packet = new Datagrampacket (nouveau octet [echomax], echomax); while (true) {// exécuter pour toujours, recevant et faisant écho datagrams socket.receive (paquet); // Recevoir le paquet de client System.out.println ("Gestion du client à" + paquet.getAddress (). GethostAddress () + "sur le port" + paquet.getport ()); Socket.Send (paquet); // renvoie le même paquet à Client Packet.SetLength (eChomax); // réinitialiser la longueur pour éviter le tampon rétrécissant} / * non atteint * /}}二. 客户端代码 :
importer java.net. *; importer java.io. *; classe publique udpeChoClientTimeout {private static final int timeout = 3000; // Renvoyer le délai d'attente (millisecondes) Final statique privé int maxtries = 5; // MAXIMUM RetRansmissions Public static void main (String [] args) lève ioException {InetAddress ServerAddress = InetAddress.getByName ("127.0.0.1"); // Adresse du serveur int servport = 5500; // Port de serveur // Convertit la chaîne d'argument en octets en utilisant le codage par défaut Byte [] byTestoSend = "Hi, world" .getBytes (); DatagramSocket socket = new DatagramSocket (); socket.setsoTimeout (timeout); // Temps de blocage de réception maximum (millisecondes) // Envoi du paquet Datagrampacket SendPacket = new Datagrampacket (byTesToSend, bytestoSend.length, serverAddress, servport); Datagrampacket reçoilepacket = // Receiving packet new Datagrampacket (new Byte [byTestoSend.Length], byTestoSend.length); int essaie = 0; // Les paquets peuvent être perdus, nous devons donc continuer d'essayer Boolean reçuResponse = false; do {socket.send (sendPacket); // Envoi de la chaîne Echo try {socket.receive (recevePacket); // Tentative de réception de réponse en écho if (! Recesepacket.getAddress (). Equals (serverAddress)) {// check // Source Throw New ioException ("Packet reçu d'une source inconnue"); } reçuResponse = true; } catch (InterrupteDioException e) {// Nous n'avons rien eu d'essais + = 1; System.out.println ("Timed Out", + (Maxtries - essais) + "Plus d'essais ..."); }} while ((! reçoitResponse) && (essaie <maxtries)); if (reçuResponse) {System.out.println ("reçu:" + new String (recesepacket.getData ())); } else {System.out.println ("No Response - Abanding Up."); } socket.close (); }}上述代码的 UDP 服务端是单线程 , 一次只能服务一个客户端。
°