WebSocket服务器只能被电脑浏览器…

修改前的java代码如下,经过反复对比,发觉回传信息的String与C#那个服务器代码一致,但iOS与Android就是连不上,一发回握手信息就失败。而且是还没发任何消息,一发送握手就失败。推测是握手信息的问题。由于String一模一样,推测是编码问题。println编译好后的byte数组,发觉大体也一致,没啥问题:

85 U
112 p
103 g
114 r
97 a
100 d
101 e
58 :
32 
87 W
101 e
98 b
83 S
111 o
99 c
107 k
101 e
116 t
10

 

就是发觉有微妙异样,同时修改C#代码,也让它把byte数组打印出来:

WebSocket服务器只能被电脑浏览器连,而不能被Android、iOS连接问题解决,回车符问题

原来是回车那儿的问题:

java的\n会被UTF-8编码为10

而C#里面的Environment.NewLine会被UTF-8编码成13 10。

解决办法自然是把漏掉的13给每个10前加上,修改代码如下:

 

    private static StringBuilder PackHandShakeData(String secKeyAccept) {
        StringBuilder responseBuilder = new StringBuilder();
        char b=13;
        //At here \n means the 13 of UTF-8 word.
        responseBuilder.append("HTTP/1.1 101 Switching Protocols").append(b).append("\n");
        responseBuilder.append("Upgrade: WebSocket").append(b).append("\n");
        responseBuilder.append("Connection: Upgrade").append(b).append("\n");
        responseBuilder.append("Sec-WebSocket-Accept: ").append(secKeyAccept).append(b).append("\n").append(b).append("\n");
        return responseBuilder;
    }

 

于是就能成功链接了:
WebSocket服务器只能被电脑浏览器连,而不能被Android、iOS连接问题解决,回车符问题

WebSocket服务器只能被电脑浏览器连,而不能被Android、iOS连接问题解决,回车符问题

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值