Работая на сервере WebSocket в Java, я столкнулся с этой странной ошибкой. Я сократил его до двух небольших файлов Java, один из которых является сервером, а другой - клиентом. Клиент просто отправляет 0x00
, строку Hello
, а затем 0xFF
(согласно спецификации WebSocket).
На моем компьютере с Windows сервер печатает следующее:
Listening
byte: 0
72 101 108 108 111 recieved: 'Hello'
На моем Unix-сервере тот же код печатает следующее:
Listening
byte: 0
72 101 108 108 111 -3
Вместо получения 0xFF он получает -3, никогда не выходит из цикла и никогда не печатает то, что получил.
Важная часть кода выглядит следующим образом:
byte b = (byte)in.read();
System.out.println("byte: "+b);
StringBuilder input = new StringBuilder();
b = (byte)in.read();
while((b & 0xFF) != 0xFF){
input.append((char)b);
System.out.print(b+" ");
b = (byte)in.read();
}
inputLine = input.toString();
System.out.println("recieved: '" + inputLine+"'");
if(inputLine.equals("bye")){
break;
}
Я также загрузил два файла на свой сервер:
Мой компьютер с Windows работает под управлением Windows 7, а мой компьютер с Linux работает под управлением Debian
Edit:
Когда b является int, он все еще действует странно. Я отправляю 0xFF (255), но получаю 65533 (не 65535 или 255).