在用Java编写WebSocket服务器时,我遇到了这个奇怪的错误.我把它减少到两个小的java文件,一个是服务器,另一个是客户端.客户端只需发送0x00字符串Hello然后0xFF(根据WebSocket规范).
在我的Windows机器上,服务器打印以下内容:
Listening
byte: 0
72 101 108 108 111 recieved: 'Hello'
Run Code Online (Sandbox Code Playgroud)
在我的unix框中,相同的代码打印以下内容:
Listening
byte: 0
72 101 108 108 111 -3
Run Code Online (Sandbox Code Playgroud)
获得-3而不是接收0xFF,从不打破循环并且永远不会打印它收到的内容.
代码的重要部分如下所示:
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;
}
Run Code Online (Sandbox Code Playgroud)
我还将这两个文件上传到我的服务器:
我的Windows机器正在运行Windows 7,而我的Linux机器正在运行Debian
编辑:
当b是一个int时,它仍然很奇怪.我发送0xFF(255)但接收65533(不是65535或255).