我是靠谱客的博主 搞怪机器猫,这篇文章主要介绍C/C++ 实现websocket客户端,现在分享给大家,希望可以做个参考。

网上有一个现存的开源库,websocketpp,但好像不太适合目前开发的项目,好在是开源库,可以找找源代码来整一波,fork一波websocketpp,其实整个东西大概就是一个websocket头协议,网上有太多讲websocket头协议,我只提几个在开发时要注意的骚东西!!!

1.注意在进行握手的头协议时,定要填写Origin头协议,Host也要填,可以这样做:
Origin:http://www.Ip:port.com
Host:Ip:port
2.注意客户端向服务器发送要使用Mask,服务器返回是不用mask的!!至于如何mask网上也有
3.建议不分包发送。。不然麻烦的很
好的,就不贴代码了,有兴趣的可以找我要~
4. 握手要客户端随机生成个16字节,然后再base64加密,然后发给服务器,服务器传回的时候带着再加密的东西,我们就通过这个加密串来判断是不是与客户端一致来是否握手,把客户端发送的加密串先+258EAFA5-E914-47DA-95CA-C5AB0DC85B11″,然后再sha1,再将字节转换成网络字节顺序 然后再base64加密,与服务器返回的匹配一波,如果等就来handshake!!代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char buff[128]={0}; sscanf(pFind,"Sec-WebSocket-Accept: %srn",buff); char buff2[128]={0}; sprintf(buff2,"%s%s",m_sendKey,WEBSOCK_KEY_HANDSHAKE); uint32 msg[5]={0}; SHA1::Get(buff2,strlen(buff2),msg); for (int i = 0; i < 5; i++) msg[i] = htonl(msg[i]); //将字节转换成网络字节顺序 Base64Util::Encode(msg,20,buff2); if(0 == strcmp(buff,buff2)) { //握手成功!@! } else { //握手失败!@! }

相应的坑:实现websocket的一个坑,小心别像我一样掉下去

更多文章:http://blog.csdn.net/what951006
powered by:小乌龟在大乌龟背上~

最后

以上就是搞怪机器猫最近收集整理的关于C/C++ 实现websocket客户端的全部内容,更多相关C/C++内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(105)

评论列表共有 0 条评论

立即
投稿
返回
顶部