2012-03-26 9 views
1

私は自分のPCと通信できる簡単なAndroidアプリケーションを作成しています。私のコンピュータには、Javaで非常に単純なUDPサーバがあります。UDPクライアントがデータをサーバーに送信しましたが、応答がありません

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){ 
    } 
} 

と私は、サーバーにUDPパケットを送信し、応答を待っている私のアンドロイドアプリ内の別の簡単なコードを持っています。

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) { 
    } 

問題は、私のクライアントが応答を待っていることです。サーバーは文字列 "marco"を確実に受信しており、おそらく応答 "ポロ"を送信していますが、クライアントは受信していません。私はクライアント上でタイムアウトを削除しようとしましたが、アプリケーションを強制終了するまでフリーズします。

誰かが私のコードでエラーを見ることができますか?なぜそれがうまくいかないのか分かりません。私は正常にTCPサーバーと同じセットアップでクライアントをセットアップすることができましたが、UDPを行うことはできません。

+0

サーバが実際に応答を送信していることを確認するためにWiresharkなどのネットワークスニファを使用しましたか? – Thomas

+0

私はいなかったが、私は今それをやった。サーバーが応答を送信しています。問題はそれが間違ったポートに送信していたことでした。パケットがどのポートから来たのかを確認するために、サーバーにコードを追加する必要がありました。私はそれが宛先ポートと同じになると仮定しました。 Wiresharkヒントありがとう –

答えて

1

サーバーが間違ったポートに送信しています。受信したデータグラムのポートに送信する必要があります。要求データグラムを再利用し、データを応答データに変更するのが最も簡単です。返信先アドレスは既に存在しています。

関連する問題