2012-02-12 10 views
0

Wiresharkはクライアントがサーバーにパケットを送信したことを示すサーバー/クライアントタイプのアプリケーションを持っていますが、サーバーは予期された応答を返していますが、ICMP宛先ポート到達不能エラーを示しています。ネットワークエラーをデバッグする方法(具体的にはICMP)

私はこれまで私のために働いていたMDSNウェブサイト上の機能を使用しています。

EDIT:更新するには電話機がリッスンを開始した後にパケットが送信されていることを確認した後、他のポートを試しました。ソケット例外はありませんので、ネットワークエラーをデバッグする最良の方法を探しています。

アイデア?

public string Receive() 
    { 
     string response = "Operation Timeout"; 



     // We are receiving over an established socket connection 
     if (udpSocket != null) 
     { 
      // Create SocketAsyncEventArgs context object 
      SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs(); 
      socketEventArg.RemoteEndPoint = new DnsEndPoint(SERVER, RECIVEPORT); 

      // Setup the buffer to receive the data 
      socketEventArg.SetBuffer(new Byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE); 

      // Inline event handler for the Completed event. 
      // Note: This even handler was implemented inline in order to make this method self-contained. 
      socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e) 
      { 
       if (e.SocketError == SocketError.Success) 
       { 
        // Retrieve the data from the buffer 
        response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred); 
        response = response.Trim('\0'); 
       } 
       else 
       { 
        response = e.SocketError.ToString(); 

       } 

       _clientDone.Set(); 
      }); 

      // Sets the state of the event to nonsignaled, causing threads to block 
      _clientDone.Reset(); 

      // Make an asynchronous Receive request over the socket 
      Debug.WriteLine("Listening now:" + DateTime.Now.Second + ":" + DateTime.Now.Millisecond); 
      try 
      { 
       Debug.WriteLine("No socket exception"); 
       udpSocket.ReceiveFromAsync(socketEventArg); 
      } 
      catch (SocketException e) 
      { 
       Debug.WriteLine(e.SocketErrorCode); 
      } 

      // Block the UI thread for a maximum of TIMEOUT_MILLISECONDS milliseconds. 
      // If no response comes back within this time then proceed 
      _clientDone.WaitOne(TIMEOUT_MILLISECONDS); 
     } 
     else 
     { 
      response = "Socket is not initialized"; 
     } 

     return response; 
    } 

答えて

0

「ICMP宛先ポートに到達できません」は、送信先のポートにバインドされたアプリケーションがないことを意味します。 sendto()がIPアドレスとポート番号を修正するように設定されていることを確認してください。リスナーがINADDR_ANYと正しいポートでbind()を呼び出していることも確認してください。一般的な間違いは、ポート番号をネットワークバイトオーダー(ビックエンディアン)に変換することを忘れることです。 htons()を参照してください。

関連する問題