내 응용 프로그램 중 하나를 Java 6에서 Java 7로 업그레이드하는 중에 흥미로운 문제가 발생했습니다. 간단한 Java 소켓 프로그램입니다. COM 소켓에 명령을 보내고 응답을받습니다. Java 6 환경에서 완벽하게 작동하지만 Java 7 환경에서 동일한 코드를 실행하려고하면 소켓이 InputStream에 아무것도 표시되지 않는 것처럼 보입니다.소켓이 Java에서 입력을 수신하지 못합니다.
내가 연결하고있는 COM 소켓이 명령을 받고 응답을 보내는 지 확인할 수 있습니다. 방화벽을 사용하지 않는 두 경우 모두 똑같은 시스템에서 실행되며 정확히 동일한 코드가 두 번 실행되었습니다.
Java 7에서 변경된 사항이 있습니까? 더 심각한 결함이 있습니까? 아니면 단순히 Java 버그입니까?
다음은 코드를 약간 제거한 버전입니다.
public static void main(String[] arguments) throws Exception {
InetAddress server = InetAddress.getByName(serverAddress);
Socket sock = SSLSocketFactory.getDefault().createSocket(server.getHostAddress(), port);
InputStream in = sock.getInputStream();
OutputStream out = sock.getOutputStream();
out.write(command.getBytes()); //Is valid command
String token = "";
responseReader: while (true) {
try {
Thread.sleep(1);
}
catch (InterruptedException exception) {}
byte[] d = new byte[in.available()];
int avail = in.read(d);
for (int i = 0; i < avail; i++) {
if (d[i] == fieldSeperator) {
token = "";
}
else if (d[i] == commandSeperator) {
break responseReader;
}
else {
token += (char) d[i];
}
}
}
}
내가 생각할 수있을만큼 많이 시도했지만, 대부분의 시간이 중요하지 않다는 것을 알고 있습니다. 스트림을 읽는 다른 방법을 사용하고, SSLSocket에 캐스팅하고 다른 호출을하고, 몇 가지를 추가합니다.
서버는 어떻게 작동합니까? 출력을 쓴 직후 소켓을 닫습니까? – partlov
연결 끊기 명령이 전송 될 때까지 둘 다 열려 있습니다. – Swop
어떻게 * 소켓이 InputStream *에서 아무것도 수신하지 않는 것으로 나타 났습니까? 디버그? 아니면 출력할까요? – Andremoniy