gpt4 book ai didi

java - 编写 WebSocket 服务器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:27 26 4
gpt4 key购买 nike

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

这对于握手来说工作正常,所有握手数据都是可读的,但在握手完成后它就不起作用了。

握手后的数据是否以某种方式加密?如何阅读?

编辑:

程序文件:

SocketConnectTest.html
ServerTest.java
ClientSessionTest.java
ResponseGenerator.java
output

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

解决方案:有关解决方案,请参阅下面的 pimvdbs 帖子和他在 How to (de)construct data frames in WebSockets hybi 08+? 的回答

最佳答案

来自网络套接字的数据是原始数据,而不是字符串编码数据。

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

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

关于java - 编写 WebSocket 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com