2016-04-30 8 views
0

Ich bin neu in Java-Sockets, ich versuche, eine einfache UDP-Übertragung mit Client-Server zu erstellen. Mein Problem ist jetzt, dass der Server die Endlosschleife ausführt und keine Nachricht an den Client sendet. Sorry, wenn ich habe einige dumme Fehler, dankJava-Sockets UDP bidirektional mit Datagramm

Server:

import java.net.*; 
import java.util.*; 


class EchoServer { 

    public static void main(String args[]) throws Exception { 

    DatagramSocket socket = new DatagramSocket(54373); 
    DatagramPacket packet = new DatagramPacket(new byte[512],512); 
    String temp = "Hello client"; 
    byte[] buffer = temp.getBytes(); 

    while (true) { 
     socket.receive(packet); 
     System.out.println("Received from client"); 

     DatagramPacket packet2 = new DatagramPacket(buffer,buffer.length,InetAddress.getByName("127.0.0.1"),54373); 
     socket.send(packet2); 
    } 
    } 
} 

Auftraggeber:

import java.net.*; 
import java.util.*; 


class EchoClient { 
    public static void main(String args[]) throws Exception { 
    DatagramSocket socket = new DatagramSocket(); 
    socket.setSoTimeout(5000); 
    byte[] buffer = "Hello Server".getBytes(); 
    DatagramPacket packet = new DatagramPacket(buffer,buffer.length,InetAddress.getByName("127.0.0.1"),54373); 
    socket.send(packet); 

    DatagramPacket packet2 = new DatagramPacket(new byte[512],512); 
    socket.receive(packet2); 
    System.out.println("Received from server"); 
    } 
} 

aber mein Server ist in der Lage das Original "Paket" statt Paket2 zu senden

Antwort

0

Ihr Server sendet an sich selbst zurück. Anstatt beim Entwerfen des Antwortdatagramms eine eigene Portnummer zu verwenden, sollte sie diejenige verwenden, die sich bereits im Anforderungsdatagramm befindet. Und die IP-Adresse. In der Tat sollte es das Anfrage-Datagramm nur so senden, wie es ist, da es ein Echo-Server ist: keine Notwendigkeit, ein anderes zu konstruieren.

Wenn das Protokoll ändert, ist die Idee, die setData() Methode auf die Anfrage zu verwenden, um die Antwort in sie zu setzen, anstatt ein neues Datagramm neu zu erstellen.