Я столкнулся с интересной проблемой, пытаясь обновить одно из моих приложений с 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 и делая разные вызовы, добавляя несколько сон.