lzpng
lzpng
2015-06-09 09:18
采纳率: 100%
浏览 8.7k
已采纳

WebSocket服务端发消息给客户端,浏览器收到消息就关闭了

自己按照 Websocket 的 文档写的, 浏览器每次连接上, 一收到消息就断开了
报错:WebSocket connection to 'ws://192.168.1.248:2051/' failed: A server must not mask any frames that it sends to the client.
但是 内容根本就没有mask
然后连网上别的websocket服务器,连上发消息正常, 然后直接对消息抓包 过来原文发送,还是包这个错误;
wireshark 都能识别,但是 浏览器就是一收到就报错断开,,,快崩溃了了~~~~

下面是发送的数据:
char tt[250]={0x81,0x53,0x7b,0x22,0x6a,0x73,0x6f,0x6e,0x72,0x70
,0x63,0x22,0x3a,0x22,0x32,0x2e,0x30,0x22,0x2c,0x22,0x65,0x72,0x72,0x6f,0x72,0x22
,0x3a,0x7b,0x22,0x63,0x6f,0x64,0x65,0x22,0x3a,0x2d,0x31,0x30,0x30,0x30,0x30,0x32
,0x2c,0x22,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x22,0x3a,0x22,0x54,0x65,0x73,0x74
,0x5f,0x56,0x61,0x6c,0x75,0x65,0x20,0x69,0x73,0x20,0x6e,0x6f,0x74,0x20,0x76,0x61
,0x6c,0x69,0x64,0x20,0x6a,0x73,0x6f,0x6e,0x22,0x7d,0x7d,0};

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

11条回答 默认 最新

  • lzpng
    lzpng 2016-08-19 03:21
    已采纳

    重新写了server的发送数据帧, 问题已解决!
    代码在这里:
    https://github.com/lzpong/WebSocket

    点赞 评论
  • unitepos
    unitepos 2015-06-09 09:30

    收到就报错断开,,,快崩溃了了

    点赞 评论
  • oyljerry
    oyljerry 2015-06-09 11:31

    怀疑是发送的数据问题,换一个其他简单的数据试试。

    点赞 评论
  • lzpng
    lzpng 2015-06-10 02:02

    就没有人 遇到过???

    我的解决方案 , 代码在这里:
    https://github.com/lzpong/WebSocket

    点赞 评论
  • yiming5201314
    yiming5201314 2016-01-10 11:35

    mask指的是掩码,客户端向服务器发送数据可以有掩码也可以没有掩码,但是服务器向客户端发数据必须不带掩码。

    点赞 评论
  • wang0077
    白云使者 2016-02-24 13:26

    俺遇到了 还没解决不知道怎么解决

    点赞 评论
  • wang0077
    白云使者 2016-02-24 13:26

    俺遇到了 还没解决不知道怎么解决

    点赞 评论
  • huangsz83
    huangsz83 2016-09-17 08:39

    请问楼主, 你是怎么解决的,我现在也卡在这个问题上, 服务端使用php 就没有问题, 使用c语言,就无法发送。

    点赞 评论
  • huangsz83
    huangsz83 2016-09-17 08:40

    但是我使用wireshark抓出来的包是一样的。

    点赞 评论
  • huangsz83
    huangsz83 2016-09-17 09:16

    这个问题我解决了,我遇到的问题 其实不是数据包 打包的问题,而是我在发送 握手协议数据的时候,多发送了一个 \0 回客户端。 它居然会影响到下一次数据!

    点赞 评论
  • luxiaohong
    xhlu 2020-03-05 10:31

    我是这样解决的,发送数据时,strlen返回的是数组的长度,其中包括字符串结尾的0,我把send()的第三个参数写成准确的字符串长度后就可以正常通信了(**就是下面的strlen((char*_)frame)改一下**),
    int result = send(soc, (char*)frame, strlen((char*_)frame), 0);

    点赞 评论

相关推荐