我正在尝试使用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的一个严重混乱的规范!
这里的任何人都知道我做错了什么?
答案 0 :(得分:3)
正如您在this article或webSocket 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
解决。它也可能适合你。