C++로 작성된 서버의 소켓을 통해 요청하는 Java 코드가 있습니다. 통신은 단순히 자바 코드가 요청에 대한 라인을 작성한 다음 서버가 응답으로 라인을 작성하지만 때로는 서버가 응답하지 않는 것처럼 보이기 때문에 ExecutorService 기반 타임 아웃을 구현하여 삭제하려고 시도합니다. 연결을 다시 시작하십시오.비정상적인 소켓 서버에 대한 클라이언트 연결을 끊고 다시 시작하는 방법
는가 연결 작업을하려면 나는 유지 :이 타임 아웃 코드 요청 아니었다면
server = new Socket(hostname, port);
out = new PrintWriter(new OutputStreamWriter(server.getOutputStream()));
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
은/단계가 나타납니다
Socket server;
PrintWriter out;
BufferedReader in;
때문에 연결을 설정하는 문제이다 간단히 :
String request="some request";
out.println(request);
out.flush();
String response = in.readLine();
연결을 닫으려고 할 때 :
in.close();
out.close();
socket.close();
그러나이 중 하나가 차단되어 반환되지 않는 것으로 보입니다. 아무도 내게 왜 이들 중 하나가 차단하고 연결을 포기하고 리소스 누출 문제로 끝내지 않을 적절한 방법이 될 것이라고 단서를 줄 수 있습니까?
필자는 setSoTimeout()을 호출하지 않았지만 쓰기 호출 (out.close()도 차단 된 것처럼 보입니다)에서 차단되는 경우 읽기 호출에만 영향을 미친 것처럼 들립니다. 그게 날 도와주지 않을거야 - 맞지? –