WebSocket服务器端:向客户端发送文本帧



我正在从服务器发送自定义web套接字帧到客户端。我成功地实现了无缝握手,但发送常规文本帧会导致我出现问题(客户端未接收到消息)。这是我发送的内容:

unsigned char data2[6] = { 129, 4, 't', 'e', 'x', 't' };
int jj = SDLNet_TCP_Send(client_socket, data2, 6);

数据被正确发送(握手工作和jj的值为6)。我基于我的代码在这里找到的解释,我如何在服务器端发送和接收WebSocket消息?

我的客户端很简单,我发布只是为了完成:

<!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.

你知道为什么握手有效而普通文本无效吗?

我解决了这个问题。它现在可以工作了,因为事实证明,在握手结束时需要额外的rn (https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers)。所以我的握手是不正确的,但不知何故火狐接受了它(但后来不接受消息)。

总之,我上面发布的链接说握手的格式应该是:

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

相关内容

  • 没有找到相关文章