1. 程式人生 > >C/C++ 實現websocket客戶端

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 { //握手失敗!@! }

相關推薦

C/C++ 實現websocket客戶

網上有一個現存的開源庫,websocketpp,但好像不太適合目前開發的專案,好在是開源庫,可以找找原始碼來整一波,fork一波websocketpp,其實整個東西大概就是一個websocket頭協議,

C語言實現sip客戶 1

開源的sip伺服器端,使用過的最好用的是Asterisk,標準C程式實現,程式碼清晰。 sip的client相對比較多,個人使用過有exosip,pjsip和opal。 根據使用經驗,exosip簡單易用,在PC上用比較方便。但是涉及的相關資源太多,用了osip,srtp,

一個用C++編寫的WebSocket客戶示例程式碼

  上次寫了WebSocket服務端,這次工作當中需要一個用C++實現的WebSocket客戶端,寫好後這裡記一下,免得以後忘記。 本示例共有三個檔案組成,依賴Websocket++第三方庫 其中main.cpp是使用示例 #include <iostream>

js實現webSocket客戶

1. websocket由於http請求只能由客戶端發起,所有當伺服器資源有變化時,客戶端只能通過輪詢的方式。非常浪費資源。websocket的特點:伺服器可以主動向客戶端推送資訊,客戶端也可以主動向伺

C# 實現FTP客戶

枚舉 username rect 進行 sco fine pac out puts 本文是利用C# 實現FTP客戶端的小例子,主要實現上傳,下載,刪除等功能,以供學習分享使用。 思路: 通過讀取FTP站點的目錄信息,列出對應的文件及文件夾。 雙擊目錄,則顯示子目錄,如果是

C++ 簡單的 Tcp 實現 socket 客戶客戶通訊

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

使用C語言socket實現windows pc與ftp伺服器通訊---socket實現ftp客戶

code // Client.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> #include <fstream> #include <WinSock2.h&

C++ 簡單的 Tcp 實現[socket] 客戶客戶通訊

開發環境  Vs 2008  新建一個 win32 console  project //  伺服器端程式碼 // Server.cpp : Defines the entry point for

C# 實現WebSocket服務

.net4.5中實現了對websocket的支援 在這裡我使用的是.net4.0。因此需要對原本的socket傳送的資料根據websocket的協議進行解析和打包。 文章參考 http://www.cnblogs.com/dolphinX/p/3462898.h

Linux下的C語言程式設計——簡單實現tcp客戶和伺服器

以下程式均未做錯誤處理,等有時間一定完善 客戶端 #include <stdio.h> #include <sys/socket.h> #include <stdlib.

C語言實現websocket服務器

sockaddr extend ++i set strlen ner ace == perl Websocket Echo Server Demo 背景 嵌入式設備的應用開發大都依靠C語言來完成,我去研究如何用c語言實現websocket服務器也是為了在嵌入式設備中實現一個

Windows socket c++ TCP UDP 簡單客戶 vs2013

進行 msg print type pro i/o while write n) socket 主要是網絡中進程之間的通信,起源於Unix,而“一切皆可文件”的思想一樣可以用在socket上,即 打開 -> 讀寫 -> 關閉。 int socket(int do

如何實現從 Redis 中訂閱消息轉發到 WebSocket 客戶

模式 func pen subscribe ssa ole ade 連接 回調函數 PHP 的redis擴展是阻塞式 IO ,使用訂閱/發布模式時,會導致整個進程進入阻塞。因此必須使用Swoole\Redis異步客戶端來實現。 實例代碼 1 $server = new

websocket客戶實現

aep pvs shc fop aca boa drl exc apc 杭電1032 熱烈慶祝本人受關註人數即將突破11000大關!散分!! 看幾遍了 老是1error, 求大神幫忙!!! initializer_list不是std成員,求大神解惑,百度了好久一直沒解決 7

C# 不安裝Oracle客戶情況下,如何連接到Oracle數據庫

是不是 如何 () 需要 -s 找到 密碼 dex add 簡介:   在我們開發應用場景經常碰到需要連接Oracle數據庫,這也是相當常見的一種情況。一般.Net環境連接Oracle數據庫,可以通過TNS/SQL.NET 配置文件,而 TNS 必須要 Oracle 客戶端

學習記錄---C# Web程序獲取客戶電腦信息

C# oid tostring -- mac listen console ads ima 問題描述:由於最近項目需要使用Mac地址與註冊碼進行加密處理,但是又因為Web程序的局限性不能獲取客戶端電腦系統信息,當然IE瀏覽器有一個activex控件他是可以通過Js在前端代碼

C#不安裝Oracle客戶連線Oracle資料庫

方法如下:(環境:Vs2003+Oracle10g) 1、把instantclient-basic-win32-10.2.0.4.zip中的檔案解壓到指定位置(我本機是解壓到D:/fox,並命名為:instantclient)其內面應該包括:BASIC_README、oci.

基於C/S模式的客戶軟體系統

1 C/S模式     C/S (Client/Server,客戶機/伺服器)模式又稱C/S結構,是軟體系統體系結構的一種。C/S模式簡單地講就是基於企業內部網路的應用系統。客戶端負責執行前臺功能,實現各自的使用者介面和業務邏輯處理;而伺服器端執行資料庫管理系統(DBMS

基於Mysql C Api編寫mysql客戶程式 多執行緒

在編寫mysql客戶端程式時,最常見的就是連線mysql,和關閉mysql,在這裡需要注意,如果使用不當將會造成記憶體洩漏。 單執行緒環境:一般使用 -lmysqlclient連結mysql客戶庫,mysql_init函式會自動呼叫my_library_init初始化my

C# 完整的UDP客戶程式碼 組播+單播 非同步+同步

using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; u