1

私はサーバー/クライアントコーディングにかなり慣れておらず、自分自身を教えようとしているので、これが単純な場合は許してください。

私は、両方が実行されている間、正常に動作し、完全に相互作用するサーバーとクライアントを作成しました。私が遭遇した問題は、クライアントを含むアプリケーションを終了するときです。するとすぐに、次のような終わりのないエラーが発生します。

null -- Connection reset
java.net.SocketInputStream.read(SocketInputStream.java:113)
java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
java.io.BufferedInputStream.read(BufferedInputStream.java:317)
sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:107)
sun.nio.cs.StreamDecoder.read(StreamDecoder.java:93)
java.io.InputStreamReader.read(InputStreamReader.java:151)

クライアントのソケットへの参照でメソッドを呼び出すことはclose()、これには何の影響も及ぼさないようです。サーバーから呼び出してみif(socket.isClosed())ましたが、クライアントが閉じた後も開いたままであると表示されます。

アプリケーションが終了したときに、ストリームとソケットを適切に閉じるにはどうすればよいですか?

4

2 に答える 2

1

可能であれば、サーバーアプリケーションに接続を閉じるように指示するコマンドを送信できます。

于 2012-11-30T13:13:50.073 に答える
-1

明らかに、あなたは過去のEOSを読んでいて、おそらくまだサーバーにデータを送信しています。アレクサンダーパブロフの答えとは反対に、読んでいるときにすでにEOS表示を受け取っているので、特別なメッセージを送信する必要はありませんが、クライアントクローズによって送信されるEOS表示に注意する必要があります。

于 2012-11-30T19:00:56.947 に答える