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:小烏龜在大烏龜背上~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章