2012-03-26 11 views
1

Ich erstelle eine einfache Android-App, die mit meinem PC kommunizieren kann. Auf meinem Computer habe ich einen sehr einfachen UDP-Server in Java.UDP-Client, der Daten an den Server sendet, aber keine Antwort erhält

public void run(){ 

    try{ 
     DatagramSocket serverSocket = new DatagramSocket(port); 
     byte[] receiveData = new byte[8]; 
     byte[] sendData = new byte[8]; 

     while(true) 
      { 
       DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
       serverSocket.receive(receivePacket); 
       String sentence = new String(receivePacket.getData()); 
       System.out.println("RECEIVED: " + sentence); 
       InetAddress IPAddress = receivePacket.getAddress(); 
       String sendString = "polo"; 
       sendData = sendString.getBytes(); 
       DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); 
       serverSocket.send(sendPacket); 
      } 
    }catch (Exception e){ 
    } 
} 

und ich habe ein anderes einfaches Stück Code in meinem Android-App, die ein UDP-Paket an den Server sendet und wartet auf die Antwort.

public void checkServerOnline(View v) { 
    try { 
     int port = 46001; 
     DatagramSocket clientSocket = new DatagramSocket(); 
     clientSocket.setSoTimeout(1800); 
     InetAddress IPAddress = InetAddress.getByName(host); 
     byte[] sendData = new byte[8]; 
     byte[] receiveData = new byte[8]; 
     String sentence = "marco"; 
     sendData = sentence.getBytes(); 
     DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); 
     clientSocket.send(sendPacket); 
     DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
     clientSocket.receive(receivePacket); 
     clientSocket.close(); 
    } catch (Exception e) { 
    } 

Das Problem, das ich habe, ist, dass mein Client Zeit wartet auf eine Antwort warten. Der Server erhält definitiv die Zeichenfolge "marco" und sendet vermutlich die Antwort "polo", aber der Client empfängt sie nicht. Ich habe versucht, die Zeitüberschreitung auf dem Client zu entfernen, aber es friert nur ein, bis ich erzwinge, die Anwendung zu schließen.

Kann jemand einen Fehler in meinem Code sehen? Ich kann nicht verstehen, warum es nicht funktioniert. Es ist mir gelungen, einen TCP-Server und einen Client mit demselben Setup einzurichten, aber UDP scheint nicht zu funktionieren.

+0

Haben Sie mit Wireshark oder einem anderen Netzwerk-Sniffer überprüft, ob der Server tatsächlich die Antwort sendet? – Thomas

+0

hatte ich nicht, aber ich tat es jetzt einfach. Der Server sendet die Antwort. Das Problem war, dass es an den falschen Port gesendet wurde. Ich musste Code im Server hinzufügen, um zu überprüfen, von welchem ​​Port das Paket kam. Ich nahm an, es wäre genau so wie der Zielhafen - nicht sicher warum. Danke für den Wireshark-Hinweis –

Antwort

1

Der Server sendet an den falschen Port. Es sollte an den Port im empfangenen Datagramm gesendet werden, nicht an seinen eigenen Port. Am einfachsten ist es, das Anforderungsdatagramm wiederzuverwenden und nur die Daten in die Antwortdaten zu ändern: Die Rücksendeadresse ist bereits vorhanden.

Verwandte Themen