0

現在のプロジェクトでは、スマートフォンをサーバーとして使用しています。を介して特別なカードまたはタグが検出されると、サーバーが起動されNFCます。これが機能する部分です。

これを実現するためにAsyncTask、タグがスキャンされると開始される を使用しています。問題は、彼が現在呼び出しているときにサーバーを停止できないことですServerSocket.accept()AsyncTask.cancel(true)彼が接続要求を待っている間、呼び出しはサーバーを停止しません。

ある時点でサーバーを停止したい場合、どうすればよいですか?

今のところ、私はまったく無知です。私の唯一のアイデアは、サーバーソケットのタイムアウト時間を設定して、例外をスローすることでした。ServerSocket.accept()しかし、それはこれを行う唯一の方法ではないポーリングを意味しますか? もしそうなら、それは私の目にはかなり貧弱な解決策になるでしょう...

4

1 に答える 1

2

1 つの方法として、別のスレッドから ServerSocket で close() を呼び出すことができます。これにより、accept() で SocketException がスローされます。

もう 1 つは、考えていたタイムアウトを使用することです。

これを実装する方法については、次の投稿を参照してください。

ServerSocket の accept() メソッドを中断するにはどうすればよいですか?

Java 停止サーバー スレッド

リッスンしている ServerSocket を閉じる

受け入れ時にソケットがリッスンしないようにする

ServerSocket.accept() でブロックされたスレッドのブロックを解除する方法は?

于 2012-12-20T07:45:27.903 に答える