2017-12-04 7 views
-1

私はサーバーに接続し、そのサーバーから一連のバッファーを受け取る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; 
    } 
} 

しかし、時にはreadjava.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に従って

+0

あなたは上記の2つの場所に-1を持つべき場所があります。そして、あなたは 'IOException'を捕まえることでループを打ち破るべきです。 – EJP

+0

あなたは正しいです。私は変更を加えました。しかし、なぜ例外対-1? – FH35

+0

変更をすべて行っていません。掲示されるように、現在のコードは何もしません。あなたの質問に例外とスタックトレース全体を投稿してください。 – EJP

答えて

-1

違いは、このです:

  • -1ストリームの終わりに達したためにそれ以上データが存在しない場合。
  • java.net.IOException - I/Oエラーが発生した場合。

java.net.SocketExceptionそれはあなたのcatch - ブロックでキャッチされるように、java.io.IOExceptionを拡張します。

+0

入力ストリーム、クローズドソケット、非接続ソケット、 'shutdownInput()'の作成によって 'Connection reset'が発生しません。実装依存でもありません。 – EJP

+0

答えを再構築しました。 –

関連する問題