私はサーバーに接続し、そのサーバーから一連のバッファーを受け取るJavaソケットを持っています。サーバが接続を閉じる、すなわちその側にある受け入れソケットを閉じると、転送は停止する。Javaソケットがクローズされたときに '接続リセット'例外と-1の戻り値の差があります
時間、サーバが接続を閉じたときに、クライアントはソケットに関連InputStream
上のreadメソッドで-1リターンコードを取得するの大半:
Socket sSocket = new Socket(ServerAddress ,acceptorPort);
InputStream isr = sSocket.getInputStream();
byte[] buf = new byte[3200];
int rr = 1;
while (rr != -1) {
try {
rr = isr.read(buffer);
} catch (IOException e) {
e.printStackTrace();
break;
}
}
しかし、時にはread
がjava.net.SocketException: Connection reset
提起。その場合 、私は次のスタックトレースがあります
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.net.SocketInputStream.read(SocketInputStream.java:127)
at com.testing.sockets.SimpleReadTest.main(SimpleReadTest.java:149)
違いとその理由は何ですか? Javadocに従って
あなたは上記の2つの場所に-1を持つべき場所があります。そして、あなたは 'IOException'を捕まえることでループを打ち破るべきです。 – EJP
あなたは正しいです。私は変更を加えました。しかし、なぜ例外対-1? – FH35
変更をすべて行っていません。掲示されるように、現在のコードは何もしません。あなたの質問に例外とスタックトレース全体を投稿してください。 – EJP