4

AsyncTaskで次のコードを実行しています。

    socket = new Socket(host、Integer.parseInt(port));

ホスト名が正しいが、ポートをリッスンしているソケットサーバーがない場合、この行は例外をスローする数分前に機能する可能性があります。通信タイムアウトを設定できますか?また、このプロセスを停止することは可能ですか?現在、AsyncTask.cancel呼び出しに反応しません。

4

3 に答える 3

5

次のように、パラメータなしのコンストラクタを使用してソケットを作成します。

socket = new Socket();

次に、

socket.connect(remoteAddress, timeout);

詳細については、 http://developer.android.com/reference/java/net/Socket.htmlを参照してください。

- アップデート -

もともと、ソケット接続を解除する方法を聞かれたことに気づきませんでした。私はソケットプログラミングにあまり詳しくありませんが、次のようになります。

  1. すでに試したように見えるので、asynctaskでcancelを呼び出します。
  2. 非同期タスクのonCancelledメソッドをオーバーライド/実装します。実装では、ソケットへの参照を使用して(クラスインスタンス変数にする)、ソケットのclose()メソッドを呼び出す必要があります。アプリがクラッシュしないように、ソケットを閉じる際によく読んで、入力/出力ストリームの例外を適切に処理していることを確認してください。ソケットを閉じる方法の詳細については、この質問を確認してください。
于 2012-10-05T06:20:47.513 に答える
1

最初にソケットを作成してから、その中で以下のメソッドを使用する必要があります。

Socket client=new Socket();   
client.connect(new InetSocketAddress(hostip,port_num),connection_time_out); 
于 2012-10-05T06:24:39.080 に答える
0

あなたはこれを行うことができます:

Socket soc = null;
while(soc == null){
    try{
        soc = new Socket("x.x.x.x", portNumber);
    }
    catch(Exception ex){
    }
}

以来:

socket.connect(remoteAddress, timeout)

信頼性が低いことで有名です。独自のバージョンのタイムアウトをコーディングできます。私が書いたコードは、接続を無限に待ちますが、タイマーを非常に簡単に導入できます。

于 2016-06-16T14:04:44.080 に答える