다른 소켓이 닫혀있는 동안 소켓에서 읽으려고 할 때 다른 결과가 나타납니다. >를 읽은 데이터 - -Java 닫는 소켓이 다른 결과를냅니다.
I는 두 개의 소켓 A 및 B.
1) B는 일부 데이터를 전송 가지고 닫을> -> B는 일부 데이터를 판독하려고하면 그것은 -1 (또는 EOF)를 얻고 있습니다.
2) B는 데이터를 읽기 전에도 A -> A 데이터를 닫습니다. -> 이제 B가 A에서 읽으려고 시도하면 예외가 throw됩니다 (java.net.SocketException "소프트웨어로 인해 연결이 중단되었습니다.").)
제 질문을 이해할 수 없다면 제발 실례합니다.
import java.io.*;
import java.net.*;
class SocketCloser extends Thread
{
private Socket c;
public SocketCloser(Socket c) {
this.c = c;
}
public void run() {
try{
this.c.close();
} catch (Exception e) {}
}
}
public class Server
{
public static void main(String argv[]) throws Exception {
ServerSocket listen = new ServerSocket(6789);
Socket socket = listen.accept();
SocketCloser sc = new SocketCloser(socket);
InputStream is = socket.getInputStream();
// uncomment below line to get "Software caused connection abort" on client
//sc.start();
try {
Thread.sleep(1000);
int i = is.read();
System.out.println("read returned: " + i);
socket.close();
} catch (Exception e) {
System.out.println(e.toString() + " thrown");
}
}
}
Client.java
import java.io.*;
import java.net.*;
public class Client
{
public static void main(String argv[])
{
Socket cSocket;
try {
cSocket = new Socket("localhost", 6789);
InputStream is = cSocket.getInputStream();
OutputStream os = cSocket.getOutputStream();
Thread.sleep(1000);
os.write(200);
Thread.sleep(1000);
int i = is.read();
System.out.println("read returned: " + i);
cSocket.close();
} catch (Exception e) {
System.out.println(e.toString() + " thrown");
}
}
}
사람이 하나의 케이스와 다른 -1에서 예외가 왜 저를 알아내는 데 도움 주실 래요 코드
Server.java를 참조하십시오. 리눅스에 흥미롭게도 두 경우 모두 -1이되었습니다.
답변은 [TCP 연결 수명]의 다른 단계 (http : //www.sdsusa.co.kr/connections /) - 연결을 닫을 때 많은 트랜잭션이 발생합니다. –