编写 WebSocket 服务器

2023-11-29

我正在尝试用 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() 。

?‡½÷"~ÑMè‡×?‡AÎ3-¡C{îN?‡ŒÍ[Uàœ4%¶íi?‡$ÍåøH⊈íÖ?‡·†ÞžÛé±î?ê?‡'½Ø… KÒ·õ?í?‡dÒÛ'
½´á^òí?‡+ù?YG–â)Ùº?‡›?
Ë÷àb»´5?‡mÉŒQΣ!Wéµ?ˆ:J FV%f6

Java 服务器使用 BufferedReader.readLine() 从套接字检索值

BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line =socketReader.readLine();

这对于握手来说效果很好,并且所有握手数据都是可读的,但在握手完成后就不起作用了。

握手后的数据是否以某种方式加密?我怎样才能阅读它?

EDIT :

程序文件:

SocketConnectTest.html
服务器测试.java
客户端会话测试.java
响应生成器.java
output

只需运行 ServerTest.java,然后打开 SocketConnectTest.html。
ClientSession Test.initClient Listener() 处理来自客户端的消息。

解决方案 :有关解决方案,请参阅下面的 pimvdbs 帖子及其答案:如何在 WebSockets hybi 08+ 中构建(解构)数据帧?


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写 WebSocket 服务器 的相关文章

随机推荐