我在尝试将我的一个应用程序从 Java 6 升级到 Java 7 时遇到了一个有趣的问题。它是一个简单的 Java 套接字程序。它向 COM 套接字发送命令并接收响应。它在 Java 6 环境中完美运行,但是当我尝试在 Java 7 环境中运行相同的代码时,套接字似乎在 InputStream 中没有收到任何内容。
我可以确认它连接的 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 并进行不同的调用,添加一些睡眠。