编写WebSocket服务器



我正试图在java和c++中编写WebSocket服务器,但我现在卡住了。使用java和java.net.ServerSocket/java.net.Socket我成功地获得了连接并成功地进行了握手,但由WebSocket发送到java服务器的数据并不完全是我所期望的。

像这样从javascript发送消息时:

var count = 0;
function loop(){
    websocket.send("loop: " + count + "n");
    count++;
    setTimeout(loop, 100);
}

Java服务器接收这个消息,每隔一段时间换行,但不是每个websocket.send()都被调用。

?‡½÷"˜N˜我‡×?‡AI3 -¡C{?‡œ我(Ua¢4%¶ii ?‡美元Ia Hø¢ŠˆiO ?‡·†Þž问题±?¦e ?‡"½Ø…KO·o ? ?‡窦"
½´^ oi ?‡+ u ? YG-a) uº?‡;?
E÷ab»¡¯5 ?‡我œ问¦!我们µ吗?ˆ:J阵线% f6

Java服务器使用BufferedReader.readLine()

从套接字检索值
BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line =socketReader.readLine();

这在握手中工作得很好,所有的握手数据都是可读的,但在握手完成后它就不起作用了。

握手后的数据是否加密?我怎么读?

编辑:

程序文件

SocketConnectTest.html
ServerTest.java
ClientSessionTest.java
ResponseGenerator.java
输出

运行ServerTest.java,然后打开SocketConnectTest.html。
initclientlistener()处理来自客户端的消息。

解决方案:关于解决方案,请参阅下面的pimvdbs帖子和他在如何(de)在WebSockets hybi 08+中构造数据帧的回答?

通过web套接字的数据是原始的,而不是字符串编码的数据。

我建议不要在传入数据周围包装BufferedReader,因为数据包是用0x00字节帧的。您看到的这些疯狂的字符是Java不理解数据所使用的编码的结果。

你需要负责将数据分解成字符和控制部分。一旦将数据分割成适当的区域,就可以将数据解码为字符串。

相关内容

  • 没有找到相关文章

最新更新