ファイル転送のために Android フォンと PC の間に TCP ソケット接続を確立しようとしています。TCP サーバー プログラムは PC で実行され、TCP クライアント プログラムは Android で実行されます。サーバー プログラムが実行されている場合、すべて正常に動作します。しかし、サーバー プログラムが実行されていないときに、クライアントが接続を確立しようとすると、クライアントがハングします (接続を確立するまで長時間待機するという意味で)。この問題を克服するにはどうすればよいですか?そのようなサーバーが実行されていないことをクライアントが検出したらすぐにソケットを終了したいと考えています。それは可能ですか?
質問する
1585 次
3 に答える
3
Socket APIのタイムアウト設定をいじる必要があると思います。詳細については、こちらを参照してください。
于 2012-06-17T10:05:07.567 に答える
3
Socket
を構築して メソッドnew Socket()
を使用することにより、 の接続タイムアウトを制御できますSocket.connect(SocketAddress, timeout)
。
これを使用して、1 分を少し超えるデフォルトのタイムアウトを減らすことができますが、増やすことはできません。
于 2012-06-17T10:48:10.173 に答える
2
問題はサーバー構成(あなたの場合はPC)にあるようです。閉じたポートについてクライアントに通知する責任がある発信ICMPトラフィックを禁止している可能性があります。
サービスポートが実行されていないときに、サービスポートをtelnetで接続してみてください。好き
telnet <my.pc.address> <my-port>
「通常の」構成では、すぐに失敗するはずです(クライアントアプリが示すとおり)。
telnet: Unable to connect to remote host: Connection refused
ファイアウォールを使用したトリッキーな構成、ICMP禁止などでは、サービスが実行されていると「考え」、応答を待って、長時間「ハング」します。
于 2012-06-17T10:21:13.107 に答える