AsyncTaskで次のコードを実行しています。
socket = new Socket(host、Integer.parseInt(port));
ホスト名が正しいが、ポートをリッスンしているソケットサーバーがない場合、この行は例外をスローする数分前に機能する可能性があります。通信タイムアウトを設定できますか?また、このプロセスを停止することは可能ですか?現在、AsyncTask.cancel呼び出しに反応しません。
次のように、パラメータなしのコンストラクタを使用してソケットを作成します。
socket = new Socket();
次に、
socket.connect(remoteAddress, timeout);
詳細については、 http://developer.android.com/reference/java/net/Socket.htmlを参照してください。
- アップデート -
もともと、ソケット接続を解除する方法を聞かれたことに気づきませんでした。私はソケットプログラミングにあまり詳しくありませんが、次のようになります。
最初にソケットを作成してから、その中で以下のメソッドを使用する必要があります。
Socket client=new Socket();
client.connect(new InetSocketAddress(hostip,port_num),connection_time_out);
あなたはこれを行うことができます:
Socket soc = null;
while(soc == null){
try{
soc = new Socket("x.x.x.x", portNumber);
}
catch(Exception ex){
}
}
以来:
socket.connect(remoteAddress, timeout)
信頼性が低いことで有名です。独自のバージョンのタイムアウトをコーディングできます。私が書いたコードは、接続を無限に待ちますが、タイマーを非常に簡単に導入できます。