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!!代码如下:

char buff[128]={0};
sscanf(pFind,"Sec-WebSocket-Accept: %s\r\n",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++,VC,DS,websocket,源代码,开源,c++)