【发布时间】:2018-05-18 06:17:57
【问题描述】:
我有一个 Java 套接字,它连接到服务器并从该服务器接收一系列缓冲区。当服务器关闭连接时传输停止,即关闭其一侧的接受套接字。
大多数时候,当服务器关闭连接时,客户端会在与套接字关联的InputStream 上的读取方法上获得 -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)
有什么区别,为什么?
【问题讨论】: