我有一个Java套接字连接到服务器并从该服务器接收一系列缓冲区。当服务器关闭连接时传输停止,即关闭其侧面的接受套接字。
大多数情况下,当服务器关闭连接时,客户端在与套接字关联的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)
有什么区别和原因?
答案 0 :(得分:-1)
根据Javadoc的差异是:
java.net.SocketException
扩展了java.io.IOException
,因此被catch
阻止了。