7

私が所属しているクラスのゲームを開発していますが、約 99% 完了しています。ただし、問題があることに気付きました。サーバーとクライアントが切断され、クライアントが再接続を試みた場合 (サーバーがバックアップされて正常に動作している場合)、クライアントは新しい接続を確立していません。

サーバーとクライアントは両方ともマルチスレッドです。クライアントにKickメッセージを送信すると、クライアントはソケットを閉じます。再接続SocketExceptionすると、接続が押されるたびに : ソケットが閉じられますが、新しいクライアントが構築されます。これは基本的に、ソケットを作成し、get/send スレッドでサーバーに接続するクラスです。

私が非論理的にしていることがあると思いますか? 構築された古いソケットとクライアントを使用しようとしているようですが、いくつかのprintln呼び出しを行うと、新しいものを構築し、それらが異なるメモリ位置にあることがわかります。

ありがとう!

4

2 に答える 2

12

ソケットを閉じた後は、それを再利用してサーバー クラスとクライアント クラスの間で他のデータを共有することはできません。Java Socket APIから、メソッドclose()の説明について:

このソケットの I/O 操作で現在ブロックされているスレッドは、SocketException をスローします。

ソケットが閉じられると、それ以上ネットワークを使用することはできません (つまり、再接続または再バインドすることはできません)。新しいソケットを作成する必要があります。

このソケットを閉じると、ソケットの InputStream と OutputStream も閉じます。

このソケットにチャネルが関連付けられている場合、そのチャネルも閉じられます。

その後、ソケットを閉じて再度開くことはできません。それが、例外がスローされる理由だと思います。

于 2011-12-11T16:29:15.893 に答える