2

わかりました、ここに私の問題があります。Androidデバイスとのユーザーのやり取りに基づいて、UDPパケットをPC(パケットをリッスンするJavaプログラム)に送信するAndroidアプリがあります。簡単にするために、これが起こっているとしましょう - ユーザーが電話の画面をタップすると、ユーザーがタップしたポイントの座標を含む UDP パケットが送信されます。リスナー プログラムは、このパケットを受信して​​読み取り、受信した文字列を を使用して出力しますSystem.out.println()

さて、何が起こっているかというと、プログラムは最初の数パケットで完全に機能します。次に、デスクトップ上のリスナー プログラムが何も出力を表示しないように、動作を停止します。現在、問題はおそらく送信にあると思われます。アプリに (テスト目的で) 送信内容を表示するテキスト ラベルがあるため、送信パケットは確実に適切に構築されています。しかし、これがデータの送信(Androidデバイス側)または受信(デスクトップ側)の問題であるかどうかを理解する方法がわかりません。何が問題なのかを見つけて、この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

ネイティブ コードまたは Java クラスを使用していますか? 私は両方を試しましたが、NDK (つまり、Java から呼び出される C 関数として記述されたソケット) では、主にスレッドの問題が原因で、サーバー側で不安定な動作が見られました。ただし、Java Socket クラスを使用しても問題はありませんでした。さらに、Android アプリがクライアントの場合、それは問題になりません。また、Wireshark を使用して、パケットが PC に到達しているかどうかを確認します。

于 2012-08-27T19:53:07.757 に答える
1

私は主にTCP送信で作業しており、行ったすべてのUDPはほとんどがコピーアンドペースト[:-)]またはAPIを使用しています

TCP の場合、送信後にデバッグ メッセージをスローします。これにより、送信が正しく行われたことを知ることができます。ただし、この場合、書き込みはblocking.

また、Packet Tracerリスナー端末で を使用して、パケットが適切に受信されているかどうかを判断することもできます。私が気に入っているのはWireShark(Ethereal のフォークだと思います)。とても使いやすいです。リッスンするインターフェイスを指定してフィルターを指定すると、パケットが来るたびに一覧表示されます。

ただし、Windows 7 を使用している場合は、管理者権限が必要です。

于 2012-08-27T07:04:04.963 に答える