最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)WebSocket服務(wù)器的案例分享

 更新時間:2024年05月24日 09:12:09   作者:我要出家當?shù)朗? 
WebSocket是一種在單個TCP連接上進行全雙工通信的通信協(xié)議,與HTTP協(xié)議不同,它允許服務(wù)器主動向客戶端發(fā)送數(shù)據(jù),而不需要客戶端明確地請求,本文主要給大家介紹了C++實現(xiàn)WebSocket服務(wù)器的案例,需要的朋友可以參考下

一、概述

實現(xiàn) WebSocket 服務(wù)器主要參考 RFC 協(xié)議。鏈接如下:

RFC 6455: The WebSocket Protocol (rfc-editor.org)

具體的實現(xiàn)思路:

1、實現(xiàn)一個典型的 TCP 服務(wù)器。

2、TCP服務(wù)器處理客戶端請求時,依據(jù)上述文檔描述,分三個階段處理 WS Client 請求(握手階段、傳輸階段、分手階段)。

詳細代碼已上傳到 gitcode和github。

項目目錄預(yù)覽 - GitCode

GitHub - AtaoistPriest/ws_server: This is a web socket server implemented with C.

二、基本特征

1、指定服務(wù)器 IP 、Port 和 transmission 階段的消息回調(diào)函數(shù)后即可快速啟動服務(wù)器。

2、內(nèi)置輕量級日志打印器。

三、使用案例

1、客戶端 HTML 代碼

<html>
<head>
    <script>
        let ws;
 
        function doConnect(addr) {
            ws = new WebSocket("ws://" + addr);
            ws.onopen = () => {
                document.getElementById("log").value += (" Connection opened\n");
            };
            ws.onmessage = (event) => {
                document.getElementById("log").value += (" Receive: " + event.data + "\n\n"); // JSON.stringify()
            };
            ws.onclose = () => {
                document.getElementById("log").value += (" Connection closed\n");
            };
        }
		
		function doClose(addr) {
			ws.close();
		}
 
        document.addEventListener("DOMContentLoaded", (event) => {
            document.getElementById("btn_open_connect").onclick = () => {
                let server_addr = document.getElementById("server_addr").value;
                doConnect(server_addr);
            };
			
			document.getElementById("btn_close_connect").onclick = () => {
                doClose();
                document.getElementById("log").value += (" Client Close Connection\n");
            };
 
            document.getElementById("btn_send").onclick = () => {
                let msg = document.getElementById("message").value;
                ws.send(msg);
                document.getElementById("log").value += (" Send: " + msg + "\n");
            };
			
            document.getElementById("btn_clear").onclick = () => {
                document.getElementById("log").value = ("");
            };
        });
    </script>
</head>
<body>
 
<div id="header">
    <h1 align="left">WebSocket Client</h1>
    Server: <input id="server_addr" type="text" value="39.105.122.85:52323">
    <input id="btn_open_connect" type="button" value="Connect">
	<input id="btn_close_connect" type="button" value="DisConnect">
	<br/><br/>
 
    Message: <input id="message" type="text" value="">
    <input id="btn_send" type="button" value="Send">
    <input id="btn_clear" type="button" value="Clear">
	<br/><br/>
 
    <textarea cols="250" id="log" rows="50"></textarea>
</div>
</body>
</html>

2、服務(wù)端 C 代碼

#include "./src/wbsocket_server.h"
 
long msg_switch(unsigned char *req, long req_len, unsigned char *res, long res_len)
{
	bzero(res, res_len);
	long len = sprintf((char *)res, "Recv %s Successfully", req);
	return len;
}
 
void test_ws_server()
{
	logger_init("./log");
 
	start_server("172.17.83.59", "52323", msg_switch);
 
	logger_destroy();
}
 
int main(void)
{
	test_ws_server();
	return 0;
}

四、運行結(jié)果

下圖是 Web Socket 客戶端連接 Web Socket 服務(wù)器的通訊過程,包括了連接、請求回復與斷開連接。

到此這篇關(guān)于C++實現(xiàn)WebSocket服務(wù)器的案例分享的文章就介紹到這了,更多相關(guān)C++ WebSocket服務(wù)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實現(xiàn)單鏈表反轉(zhuǎn)

    C語言實現(xiàn)單鏈表反轉(zhuǎn)

    這篇文章主要介紹了C語言實現(xiàn)單鏈表反轉(zhuǎn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • VC下通過系統(tǒng)快照實現(xiàn)進程管理的方法

    VC下通過系統(tǒng)快照實現(xiàn)進程管理的方法

    這篇文章主要介紹了VC下通過系統(tǒng)快照實現(xiàn)進程管理的方法,較為詳細的講述了VC下通過系統(tǒng)快照實現(xiàn)進程管理的原理與具體實現(xiàn)方法,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • 詳解C語言的預(yù)處理效果

    詳解C語言的預(yù)處理效果

    這篇文章主要為大家介紹了C語言的預(yù)處理效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C++ Boost Pool超詳細講解

    C++ Boost Pool超詳細講解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • C/C++實現(xiàn)經(jīng)典象棋游戲的示例代碼

    C/C++實現(xiàn)經(jīng)典象棋游戲的示例代碼

    中國象棋是起源于中國的一種棋,屬于二人對抗性游戲的一種,在中國有著悠久的歷史。本文將利用C++實現(xiàn)這一經(jīng)典游戲,快跟隨小編一起學習一下吧
    2022-06-06
  • 淺談C語言的字符串分割

    淺談C語言的字符串分割

    下面小編就為大家?guī)硪黄獪\談C語言的字符串分割。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • C++迷宮的實現(xiàn)代碼

    C++迷宮的實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了C++實現(xiàn)迷宮游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++類的靜態(tài)成員變量與靜態(tài)成員函數(shù)詳解

    C++類的靜態(tài)成員變量與靜態(tài)成員函數(shù)詳解

    下面小編就為大家?guī)硪黄狢++類的靜態(tài)成員變量與靜態(tài)成員函數(shù)的文章。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11
  • C++用函數(shù)對算法性能進行測試

    C++用函數(shù)對算法性能進行測試

    算法無處不在,算法是程序的靈魂,而數(shù)據(jù)結(jié)構(gòu)則是程序的骨架,二者共同構(gòu)成了程序,那么如何評估算法的性能呢?理論上可以通過計算時間復雜度的方法來評估,但這是理性的認識,我們還有一種直觀的評估方法,那就是程序執(zhí)行的時間
    2022-08-08
  • C語言字符串替換:字符,字符串,字符數(shù)組詳解

    C語言字符串替換:字符,字符串,字符數(shù)組詳解

    這篇文章主要介紹了C++字符串替換的字符,字符串,字符數(shù)組,需要考慮的情況比較全面,有不錯的借鑒價值,需要的朋友可以參考下
    2021-09-09

最新評論

酒泉市| 江口县| 正阳县| 盖州市| 桑植县| 万源市| 和硕县| 于田县| 墨脱县| 安新县| 敦煌市| 彭水| 安康市| 隆回县| 绥化市| 吴忠市| 梓潼县| 和林格尔县| 通化市| 青海省| 长沙市| 涟水县| 资阳市| 全椒县| 库车县| 辽宁省| 临澧县| 五家渠市| 大英县| 伊宁市| 原平市| 文登市| 蓝田县| 汕尾市| 中江县| 米林县| 乌鲁木齐市| 鄂托克前旗| 鹰潭市| 竹山县| 资溪县|