서버에 연결하고 해당 서버에서 버퍼 시퀀스를받는 Java 소켓이 있습니다. 서버가 연결을 닫을 때 전송이 중지됩니다 (즉, 옆에있는 수락 소켓을 닫음).Java 소켓이 닫혀있을 때 'connection reset'예외와 -1 반환 값의 차이
시간, 서버가 연결을 닫을 때, 클라이언트는 소켓과 관련된 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)
차이와 그 이유는 무엇입니까?
위의 두 곳에서 -1을 가져야하는 곳이 1 개 있으며, 'IOException'을 잡아 당겨 루프를 제거해야합니다. – EJP
맞습니다. 나는 변화를 만들었다. 하지만 왜 예외가 -1일까요? – FH35
변경 사항을 모두 작성하지 않았습니다. 게시 된대로 현재 코드는 아무 것도하지 않습니다. 귀하의 질문에 전체 예외 및 스택 추적을 게시하십시오. – EJP