我正在尝试用 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+ 中构建(解构)数据帧?