1

私はLANゲームを実装し、同じコンピューターでテストしました。クラスを作成し、このクラスの異なるスレッドでサーバーとクライアントを作成し、相互に接続します。

2つのウィンドウ(クライアントとサーバー)を閉じて、上記の手順を再度実行した後、Javaクラスを実行し、サーバーとクライアントを作成します。私は常にこのエラーに遭遇します:(java.net.BindExceptionこのポートは以前に作成されており、まだ閉じられていないため)。

サーバーソケットを作成するたびに、catchに、常に入れserverSocket.close()ます。しかし、そのエラーはまだ私に会いました。これを防ぐためのアイデアを教えてください。

@:そして、1つのポートが作成されたことがわかっている場合、それを閉じて新しいポートを作成できますか?

ありがとう :)

4

3 に答える 3

2

serverSocket.close()をfinallyブロックに配置し、数秒待ってから、そのアドレスに再度バインドを試みる必要があります。

于 2012-10-08T19:03:35.853 に答える
2

例外がキャッチされない限り、catchブロックに入れられたものは実行されません。代わりに、close()呼び出しをfinallyブロックに入れて、常に実行されるようにします。

于 2012-10-08T19:04:52.220 に答える
0

チャネルで呼び出しclose()た後は十分ではない可能性があります。ここで説明を参照してください:http ://hea-www.harvard.edu/~fine/Tech/addrinuse.htmlTCP 接続はCLOSE-WAITまたはTIME-WAIT状態のままである可​​能性があります。アドレス(SO_REUSEADDR)を再利用して遊ぶことはできますが、うまくいきませんでした。最善の方法は、ネットワークレベルでCLOSE-WAITまたはTIME-WAITに設定されているタイムアウトを正確に待機することです。

于 2014-05-14T08:16:52.807 に答える