欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、概述

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

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

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

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

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

詳細(xì)代碼已上傳到 gitcode和github。

項(xiàng)目目錄預(yù)覽 - GitCode

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

二、基本特征

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

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

三、使用案例

1、客戶(hù)端 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;
}

四、運(yùn)行結(jié)果

下圖是 Web Socket 客戶(hù)端連接 Web Socket 服務(wù)器的通訊過(guò)程,包括了連接、請(qǐng)求回復(fù)與斷開(kāi)連接。

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

相關(guān)文章

  • C++實(shí)現(xiàn)消消樂(lè)游戲

    C++實(shí)現(xiàn)消消樂(lè)游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)消消樂(lè)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • c/c++ 標(biāo)準(zhǔn)庫(kù) bind 函數(shù)詳解

    c/c++ 標(biāo)準(zhǔn)庫(kù) bind 函數(shù)詳解

    bind是一組用于函數(shù)綁定的模板。在對(duì)某個(gè)函數(shù)進(jìn)行綁定時(shí),可以指定部分參數(shù)或全部參數(shù),也可以不指定任何參數(shù),還可以調(diào)整各個(gè)參數(shù)間的順序。這篇文章主要介紹了c/c++ 標(biāo)準(zhǔn)庫(kù) bind 函數(shù) ,需要的朋友可以參考下
    2018-09-09
  • C++實(shí)現(xiàn)俄羅斯方塊源碼

    C++實(shí)現(xiàn)俄羅斯方塊源碼

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)俄羅斯方塊源碼完整版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++實(shí)現(xiàn)LeetCode(190.顛倒二進(jìn)制位)

    C++實(shí)現(xiàn)LeetCode(190.顛倒二進(jìn)制位)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(190.顛倒二進(jìn)制位),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • DSP中浮點(diǎn)轉(zhuǎn)定點(diǎn)運(yùn)算--浮點(diǎn)數(shù)的存儲(chǔ)格式

    DSP中浮點(diǎn)轉(zhuǎn)定點(diǎn)運(yùn)算--浮點(diǎn)數(shù)的存儲(chǔ)格式

    本文主要介紹DSP中浮點(diǎn)數(shù)的存儲(chǔ)格式,很值得學(xué)習(xí)一下,需要的朋友可以參考一下。
    2016-06-06
  • OpenCV繪制正多邊形的方法

    OpenCV繪制正多邊形的方法

    這篇文章主要為大家詳細(xì)介紹了OpenCV繪制正多邊形的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++中的封裝、繼承、多態(tài)理解

    C++中的封裝、繼承、多態(tài)理解

    這篇文章主要介紹了C++中的封裝、繼承、多態(tài)介紹,需要的朋友可以參考下
    2020-01-01
  • C 語(yǔ)言程序結(jié)構(gòu)示例解析

    C 語(yǔ)言程序結(jié)構(gòu)示例解析

    本文主要講解C 語(yǔ)言程序結(jié)構(gòu),這里提供簡(jiǎn)單的示例來(lái)講解C 語(yǔ)言程序的結(jié)構(gòu),有利于剛剛學(xué)習(xí)C 語(yǔ)言的同學(xué)理解程序結(jié)構(gòu)
    2016-08-08
  • C語(yǔ)言實(shí)例上手深入理解操作符的使用

    C語(yǔ)言實(shí)例上手深入理解操作符的使用

    C 語(yǔ)言提供了豐富的操作符,有:算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符等。接下了讓我們?cè)趯?shí)例中練一下
    2022-05-05
  • Reactor反應(yīng)器的實(shí)現(xiàn)方法詳解

    Reactor反應(yīng)器的實(shí)現(xiàn)方法詳解

    本篇文章是對(duì)Reactor反應(yīng)器的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論