0

私の SwingWorkerは、ユーザーが [接続] ボタンをクリックすると、新しいものdoInBackground()を作成 (および登録) します。OP_ACCEPTServerSocketChannel

クライアントの場合isAcceptable()、 は を にSwingWorker登録SocketChannelOP_READます。

ユーザーが「切断」ボタンをクリックすると、 はSwingWorkercloses()ServerSocketChannelおよびselector(). ただし、クライアントはまだ開いています。

問題: ユーザーが [接続] をもう一度クリックすると、クライアントがまだOP_READモードにあり、ServerSocketChannel.

これを克服する方法はありますか?ServerSocketChannel再起動には、クライアントも再起動する必要がありますか?

4

1 に答える 1

1

ServerSocketChannel を再起動するには、クライアントも再起動する必要がありますか?

いいえ。既存のクライアントは接続されたままです。サーバーソケットを閉じたからといって、別の接続フェーズを通過することはありません。

上記の私のコメントに反して、切断ボタンはクライアント ソケットではなく、サーバー ソケットを閉じる必要があります。しかし、それは間違ったラベルです。ボタンは「開始」と「停止」、または「聞き取り開始」と「聞き取り停止」である必要があります。接続を行うのはクライアントです。

于 2012-09-16T04:43:31.743 に答える