我遇到了一个有趣的问题,试图将我的应用程序之一从Java 6升级到Java 7.它是一个简单的Java套接字程序。它将一个命令发送到COM套接字并接收响应。它在Java 6环境中完美工作,但是当我尝试在Java 7环境中运行相同的代码时,套接字似乎在InputStream中不会收到任何内容。套接字未接收输入Java 7
我可以确认它连接到的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
你是如何检测到的,* socket似乎在InputStream *中什么都没有收到?调试?还是打印输出? – Andremoniy