我从服务器向客户端发送自定义Web套接字帧。我设法无缝地获得握手,但发送常规文本框架会导致我出现问题(未收到客户端的消息)。这就是我发送的内容:
unsigned char data2[6] = { 129, 4, 't', 'e', 'x', 't' };
int jj = SDLNet_TCP_Send(client_socket, data2, 6);
正确发送数据(握手工作,jj值为6)。我的代码基于此处How can I send and receive WebSocket messages on the server side?的解释。
我的客户非常简单,我只是为完成而发帖:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Web Socket Example</title>
<meta charset="UTF-8">
<script type="text/javascript">
var webSocket = new WebSocket("ws://localhost:48884/", "sample");
webSocket.binaryType = "arraybuffer";
webSocket.onopen = function(e) { alert("opened"); }
webSocket.onclose = function(e) { alert("closed"); }
webSocket.onerror = function(e) { alert("error"); }
webSocket.onmessage = function(e) { alert("got: " + e.data); }
</script>
</head>
<body>
<div id="holder" style="width:600px; height:300px"></div>
</body>
</html>
我从客户端获得的Web套接字版本是13。
任何有关握手工作的想法和常规文本都没有?
答案 0 :(得分:0)
我解决了这个问题。它现在有效,因为事实证明在握手结束时需要额外的\ r \ n(https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers)。所以我的握手不正确但不知何故Firefox接受了它(但后来却不接受消息)。
无论如何,我上面发布的链接说握手格式应为:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: key
empty line
我遵守了这种格式,然后它在Firefox和IE上运行良好但在Chrome上没有。我发现要使其在Chrome上运行,我还需要指定协议:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: key
Sec-WebSocket-Protocol: my_protocol_name
empty line
上面的握手格式让我在Firefox,IE和Chrome上进行握手和服务器到浏览器的消息发送