无法通过WebSockets发送二进制数据

3
我正在开发一个查看器应用程序,其中服务器捕获图像,执行一些图像处理操作,并需要在HTML5画布上显示给客户端。我编写的服务器使用VC++,并使用http://www.codeproject.com/Articles/371188/A-Cplusplus-Websocket-server-for-realtime-interact

到目前为止,我已经实现了所需的功能。现在我需要进行优化。参考了一个聊天应用程序,该应用程序旨在发送字符串,因此我将数据编码为7位格式。这会造成额外负担。我需要二进制数据传输能力。因此我修改了编码和帧(现在操作码为130,用于二进制消息,而不是129)。我可以说服务器部分没有问题。我观察了输出帧,它遵循协议。我在客户端遇到了问题。

每当客户端接收到传入消息时,如果所有字节都在限制范围内(0到127),它就会调用onMessage(),我可以成功解码传入消息。然而,只要有一个大于127的字符引入,客户端就会调用onClose()。连接被关闭,我无法找到原因。请帮助我解决这个问题。

提示:我正在使用Chrome 22.0和Firefox 17.0


我也遇到了同样的问题。你能解决这个问题吗? - skos
2个回答

1

看起来你的问题与如何组装框架有关?由于你已经建立了一个连接,当onmessage事件即将触发时终止,我认为这是与框架相关的问题?

如果你研究一下在Google Chrome中的网络 -> WebSocket -> 连接帧,会有什么提示吗?

也许这对你来说超出范围了?但我是XSockets.NET(C#)框架的开发人员之一,我们在那里提供二进制支持。如果你感兴趣,我最近刚刚发布了一个示例,可以在https://github.com/MagnusThor/XSockets.Binary.Controller.Example找到。


其实我不这么认为。这段代码是用来传输文本帧的。 一个数据包占8kB。如果我只使用7位进行编码(没有字节可以超过0x7F),一切都会按预期运行。在发送二进制数据时,我只做了一个更改,即将Opcode从0x01(文本帧)更改为0x02(二进制帧)。 在客户端,为了测试,我只在我的OnMessage()中写了一个警报。而在二进制消息的情况下,OnMessage永远不会被调用。它会转到socket.OnClose()并关闭连接。 - Eisen Jack

1
你是如何观察出站帧的?你观察到了哪些头字节?听起来你可能没有成功设置二进制操作码,这会触发浏览器中的UTF-8验证失败。

我在使用 Visual Studio 的单步调试时观察到了,在数据被构建的过程中。我会尽快添加确切的帧数据序列,这样有助于调试。 - Eisen Jack
你可以尝试使用Wireshark进行抓包,这样你就可以看到实际的数据传输情况。 - kanaka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接