WebSocket连接到' ws:// localhost:2017 /'失败:无效的帧头

时间:2016-10-16 18:54:59

标签: c# sockets websocket asyncsocket

我正在尝试使用c#创建异步websocket服务器。

在互联网上搜索了很多之后,我已经完成了握手 但握手后,我似乎无法以字节数组格式发送任何数据:(

这是我用来将byte []数据发送到已接受和连接的套接字的代码(我检查两者!)

socket.Send(Encoding.Default.GetBytes("Hello"));
//socket is a System.Net.Sockets.Socket object.

如果我尝试这样做,我会在客户端获得此信息(我使用名为&#34的Chrome扩展名;简单的Web套接字客户端")

index.js:15 WebSocket connection to 'ws://localhost:2017/' failed: Invalid frame header  
CLOSED: ws://localhost:2017

(2017年是端口),但为什么说“无效框架”

好的,我知道"你好"字符串,但我似乎无法找到适当的标题在互联网上的任何位置:(和我搜索,我得到的是关于RTC的一个严重混乱的规范!

这里的任何人都知道我做错了什么?

2 个答案:

答案 0 :(得分:3)

正如您在this articlewebSocket specification itself中所看到的,webSocket协议以特定的数据帧格式交换数据。您不只是将字节写入普通套接字。

以下是帧格式的示例:

 0               1               2               3              
 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len |    Extended payload length    |
|I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
|N|V|V|V|       |S|             |   (if payload len==126/127)   |
| |1|2|3|       |K|             |                               |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
 4               5               6               7              
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|     Extended payload length continued, if payload len == 127  |
+ - - - - - - - - - - - - - - - +-------------------------------+
 8               9               10              11             
+ - - - - - - - - - - - - - - - +-------------------------------+
|                               |Masking-key, if MASK set to 1  |
+-------------------------------+-------------------------------+
 12              13              14              15
+-------------------------------+-------------------------------+
| Masking-key (continued)       |          Payload Data         |
+-------------------------------- - - - - - - - - - - - - - - - +
:                     Payload Data continued ...                :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|                     Payload Data continued ...                |
+---------------------------------------------------------------+

您必须以这种格式存储数据,并且还必须根据以前交换的安全凭证使用安全方案。 webSocket不是普通套接字。您必须使用webSocket协议。

仅供参考,我的员工不是从头开始实现webSocket端点,而是选择一种能够完成所有工作的库。然后,您可以发送字节,库将为您处理协议工作。

答案 1 :(得分:0)

我也面临同样的问题。通过安装socket.io at client side解决。它也可能适合你。