国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

c++: websocket 客戶端與服務(wù)端之間的連接交互

這篇具有很好參考價(jià)值的文章主要介紹了c++: websocket 客戶端與服務(wù)端之間的連接交互。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

socket

頭文件

延遲時(shí)間

通信協(xié)議地址

TCP/IP

服務(wù)端

客戶端

編程步驟

服務(wù)端

客戶端

編程步驟

1. 初始化 WSAStartup

2. 創(chuàng)建 socket

2.1 協(xié)議族

2.2 socket 類(lèi)型

2.3 協(xié)議

3. 綁定 bind (服務(wù)端)

4. 監(jiān)聽(tīng) listen(服務(wù)端)

5. 請(qǐng)求連接 connect(客戶端)

6. 接收請(qǐng)求 accept(服務(wù)端)

7. 發(fā)送數(shù)據(jù) send(客戶端)

8. 接收數(shù)據(jù) recv(服務(wù)端)

9. 關(guān)閉 closesocket

10. 停止使用 WSACleanup

實(shí)例

服務(wù)端

客戶端

異常


socket

????用于描述地址和端口,是一個(gè)通信鏈句柄。

????套接字編程有三種:

  1. 流式套接字(SOCK_STREAM):面向連接,準(zhǔn)確無(wú)誤,但效率慢,要求數(shù)據(jù)正確性。

  2. 數(shù)據(jù)報(bào)套接字(SOCK_DGRAM):無(wú)連接,只傳輸,無(wú)數(shù)據(jù)校驗(yàn)、效率高。

頭文件

#include <WinSock2.h>
#include <WS2tcpip.h>
#pragma comment(lib,"ws2_32.lib")

延遲時(shí)間

struct timeval {
        long    tv_sec;         /* seconds */
        long    tv_usec;        /* microseconds */
};
  • tv_sec : 毫秒;

  • tx_usec : 微妙。

通信協(xié)議地址

#include <netinet/in.h>

// ipv4
struct sockaddr_in
{
    sa_family_t sin_family; // 地址族(Address Family)
    uint16_t sin_port; // 16位TCP/UDP端口號(hào)
    struct in_addr sin_addr; // 32位 IP地址
    char sin_zero[8]; // 不使用
}

struct in_addr
{
    In_addr_t s_addr; // 32位 IPv4地址
}
  • sin_port、sin_addr : 必須是網(wǎng)絡(luò)字節(jié)序(NBO);

  • 一般可視化數(shù)字 : 主機(jī)字節(jié)序(HBO);

  • 該結(jié)構(gòu)體解決了 sockaddr(sin_family、sa_data[14]) 的缺陷:把目標(biāo)地址和端口信息混合在一起;

  • sockaddr_in 是 internet 環(huán)境下套接字的地址形式;

補(bǔ)充如下:

// ipv6
struct sockaddr_in6 { 
    sa_family_t     sin6_family;   /* AF_INET6 */ 
    in_port_t       sin6_port;     /* port number */ 
    uint32_t        sin6_flowinfo; /* IPv6 flow information */ 
    struct in6_addr sin6_addr;     /* IPv6 address */ 
    uint32_t        sin6_scope_id; /* Scope ID (new in 2.4) */ 
};
struct in6_addr { 
    unsigned char   s6_addr[16];   /* IPv6 address */

TCP/IP

????客戶端向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器接收請(qǐng)求后,提供相應(yīng)的服務(wù)。

服務(wù)端

????建立 socket,聲明自身的端口號(hào)和地址并綁定到 socket,使用 listen 打開(kāi)監(jiān)聽(tīng),然后不斷用 accept 去查看是否有連接,有就捕獲 socket,并通過(guò) recv 獲取消息的內(nèi)容,通信完成后調(diào)用 closeSocket 關(guān)閉這個(gè)對(duì)應(yīng) accept 到的 socket ,如果不再需要等待則 closeSocket 關(guān)閉自身 socket。

客戶端

????建立 socket,通過(guò)端口號(hào)和地址確定目標(biāo)服務(wù)器,使用 Connect 連接到服務(wù)器,send 發(fā)送消息,等待處理,通信完成后調(diào)用 closeSocket 關(guān)閉 socket。

編程步驟

服務(wù)端

1、加載套接字庫(kù),創(chuàng)建套接字(WSAStartup() / socket() );

2、綁定套接字到一個(gè) IP 地址和一個(gè)端口上( bind() );

3、將套接字設(shè)置為監(jiān)聽(tīng)模式等待連接請(qǐng)求( listen() );

4、請(qǐng)求到后,接收連接請(qǐng)求,返回一個(gè)新的對(duì)應(yīng)于此連接的套接字( accept() );

5、用返回的套接字和客戶端進(jìn)行通信(send() / recv());

6、返回,等待另一個(gè)連接請(qǐng)求;

7、關(guān)閉套接字,關(guān)閉加載的庫(kù)(closeSocket() / WSACleanup())。

客戶端

1、加載套接字庫(kù),創(chuàng)建套接字(WSAStartup() / socket());

2、向服務(wù)器發(fā)出連接請(qǐng)求(connect());

3、和服務(wù)器進(jìn)行通信(send() / recv());

4、關(guān)閉套接字,關(guān)閉加載的套接字庫(kù)(closesocket() / WSACleanup());

編程步驟

1. 初始化 WSAStartup

????WSAStartup 必須是第一個(gè) Windows 套接字函數(shù)。它允許指定 Windows 套接字版本,并檢索特定 Windows 套接字實(shí)現(xiàn)的詳細(xì)信息。

int WSAAPI WSAStartup(
  [in]  WORD      wVersionRequested, // 版本2.2 —— 0x0202 —— MAKEWORD(2,2)
  [out] LPWSADATA lpWSAData
);
  • [in] wVersionRequested

    調(diào)用方可以使用的最高版本的 Windows 套接字規(guī)范。 高順序字節(jié)指定次要版本號(hào);低順序字節(jié)指定主版本號(hào)。

  • [out] lpWSAData

    指向?WSADATA?數(shù)據(jù)結(jié)構(gòu)的指針,該結(jié)構(gòu)用于接收 Windows 套接字實(shí)現(xiàn)的詳細(xì)信息。

    如果?WSADATA?結(jié)構(gòu)的?wVersion?成員對(duì)調(diào)用方不可接受的,則應(yīng)用程序或 DLL 應(yīng)調(diào)用?WSACleanup?來(lái)釋放 Winsock DLL 資源,并且無(wú)法初始化 Winsock 應(yīng)用程序。

2. 創(chuàng)建 socket

????創(chuàng)建的 socket 默認(rèn)是一個(gè)主動(dòng)類(lèi)型的。

SOCKET socket(
    int domain, // 協(xié)議族
    int type, // socket 類(lèi)型
    int protocol // 協(xié)議類(lèi)型
);

2.1 協(xié)議族

????domain,指明通信域,決定了 socket 的地址類(lèi)型。

名稱(chēng) 含義 名稱(chēng) 含義
PF_UNIX, PF_LOCAL 本地通信 PF_X25 ITU-T X25 / ISO-8208協(xié)議
AF_INET, PF_INET IPv4 Internet協(xié)議 PF_AX25 Amateur radio AX.25
PF_INET6 IPv6 Internet協(xié)議 PF_ATMPVC 原始ATM PVC訪問(wèn)
PF_IPX IPX-Novell協(xié)議 PF_APPLETALK Appletalk
PF_NETLINK 內(nèi)核用戶界面設(shè)備 PF_PACKET 底層包訪問(wèn)

2.2 socket 類(lèi)型

????type,指定通信類(lèi)型,常用的有 SOCK_STREAM、SOCK_DGRAM。

名稱(chēng) 含義
SOCK_STREAM TCP 連接,提供序列化的、可靠的、雙向連接的字節(jié)流。支持帶外數(shù)據(jù)傳輸
SOCK_DGRAM 支持 UDP 連接(無(wú)連接狀態(tài)的消息)
SOCK_SEQPACKET 序列化包,提供一個(gè)序列化的、可靠的、雙向的基本連接的數(shù)據(jù)傳輸通道,數(shù)據(jù)長(zhǎng)度定常。每次調(diào)用讀系統(tǒng)調(diào)用時(shí)數(shù)據(jù)需要將全部數(shù)據(jù)讀出
SOCK_RAW RAW 類(lèi)型,提供原始網(wǎng)絡(luò)協(xié)議訪問(wèn)
SOCK_RDM 提供可靠的數(shù)據(jù)報(bào)文,可能數(shù)據(jù)會(huì)有亂序
SOCK_PACKET 一個(gè)專(zhuān)用類(lèi)型,不能在通用程序中使用

2.3 協(xié)議

????protocol,指定協(xié)議,對(duì)于 TCP 可指定為 IPPROTO_TCP,UDP 可為 IPPROTO_UDP。?

協(xié)議 名稱(chēng)
IPPROTO_TCP TCP 傳輸協(xié)議
IPPROTO_TCP UDP 傳輸協(xié)議
IPPROTO_SCTP STCP 傳輸協(xié)議
IPPROTO_TIPC TIPC 傳輸協(xié)議
0 默認(rèn)對(duì)應(yīng) type 的協(xié)議

3. 綁定 bind (服務(wù)端)

int bind(
    SOCKET sockfd, // 創(chuàng)建的 socket
    const struct sockaddr_in *addr, // 通信協(xié)議地址
    socklen_t addrlen // 對(duì)應(yīng)協(xié)議地址的長(zhǎng)度
);

4. 監(jiān)聽(tīng) listen(服務(wù)端)

????將 socket 變?yōu)楸粍?dòng)類(lèi)型的,等待客戶端的連接請(qǐng)求。

int listen(
    SOCKET sockfd, // 監(jiān)聽(tīng)的 socket 描述字
    int backlog // 相應(yīng) socket 可排隊(duì)的最大連接個(gè)數(shù)
);

5. 請(qǐng)求連接 connect(客戶端)

int connect(
    SOCKET sockfd, // 連接的 socket 描述字
    const struct sockaddr_in *addr, // 通信協(xié)議地址 
    socklen_t addrlen // socket 地址長(zhǎng)度
);

????通信協(xié)議地址賦值:

  • 賦值地址:

    • inet_pton(AF_INET, “127.0.0.1”, &addr.sin_addr);

    • addr.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1”);

  • 賦值端口:

    • addr.sin_port = htons(8008);

6. 接收請(qǐng)求 accept(服務(wù)端)

SOCKET accept(
    SOCKET sockfd, // 服務(wù)器的 socket 描述字,監(jiān)聽(tīng) socket 描述字
    struct sockaddr_in *addr, // 通信協(xié)議地址
    socklen_t *addrlen // 協(xié)議地址的長(zhǎng)度
);
  • 返回值是一個(gè)由內(nèi)核自動(dòng)生成的全新 socket 描述字,代表與返回客戶端的 TCP 連接。

7. 發(fā)送數(shù)據(jù) send(客戶端)

int WSAAPI send(
  [in] SOCKET     sockfd, // 連接的 socket 描述字
  [in] const char *sendbuf, // 發(fā)送的多字節(jié)數(shù)據(jù)緩沖區(qū)
  [in] int        buflen, // 發(fā)送多字節(jié)長(zhǎng)度
  [in] int        flags // 指定進(jìn)行調(diào)用的方式
);

// Linux
// read()
  • buflen :

    • 大于發(fā)送緩沖區(qū)的長(zhǎng)度,返回 SOCKET_ERROR;

    • 小于或等于時(shí),send 先檢查協(xié)議是否在發(fā)送 socket 數(shù)據(jù),是則等待發(fā)送完,否則就進(jìn)行比較 socket 發(fā)送緩沖區(qū)的剩余空間:

      • 大于剩余空間大小,則一直等待 socket 發(fā)送完;

      • 小于剩余空間大小,則將 sendbuf 數(shù)據(jù) copy 到剩余空間中。

  • flags :

MSG_DONTROUTE 指定不應(yīng)對(duì)數(shù)據(jù)進(jìn)行路由。Windows 套接字服務(wù)提供商可以選擇忽略此標(biāo)志。
MSG_OOB 發(fā)送 OOB 數(shù)據(jù)(流樣式套接字,例如僅SOCK_STREAM)。

8. 接收數(shù)據(jù) recv(服務(wù)端)

int WSAAPI recv(
  [in] SOCKET     sockfd, // 標(biāo)識(shí)連接的 socket 描述字
  [in] const char *recvbuf, // 接收的多字節(jié)數(shù)據(jù)緩沖區(qū)
  [in] int        buflen, // 接收的多字節(jié)長(zhǎng)度
  [in] int        flags // 指定進(jìn)行調(diào)用的方式
);

// Linux
// read()
  • recvbuf : 接收數(shù)據(jù)之前,必須 memset 進(jìn)行清空,接收的數(shù)據(jù)不一定填滿空間;

  • 返回值:

    • 未發(fā)生錯(cuò)誤,則將返回接收到的字符數(shù),recvbuf 指向的緩沖區(qū)將包含接收的數(shù)據(jù);

    • 如果連接已正常關(guān)閉,則返回 0;

    • 否則返回 SOCKET_ERROR ,通過(guò)調(diào)用?WSAGetLastError?來(lái)檢索特定的錯(cuò)誤代碼。

錯(cuò)誤代碼:recv 函數(shù) (winsock2.h) - Win32 apps | Microsoft Learn

9. 關(guān)閉 closesocket

int closesocket(
  [in] SOCKET s
);
  • 返回:

    • 無(wú)異常,返回 0 ;

    • 否則將返回一個(gè) SOCKET_ERROR 值:

      錯(cuò)誤代碼 意義
      WSANOTINITIALISED 未初始化調(diào)用?WSAStartup
      WSAENETDOWN 網(wǎng)絡(luò)子系統(tǒng)出現(xiàn)故障
      WSAENOTSOCK 描述符不是套接字
      WSAEINPROGRESS 阻止 Windows 套接字 1.1 調(diào)用正在進(jìn)行中,或者服務(wù)提供商仍在處理回調(diào)函數(shù)。
      WSAEINTR (阻止)Windows Socket 1.1 調(diào)用已通過(guò)?WSACancelBlockingCall?取消。
      WSAEWOULDBLOCK 套接字標(biāo)記為非阻塞,但延遲結(jié)構(gòu)的?l_onoff?成員設(shè)置為非零,l_linger?成員的延遲結(jié)構(gòu)設(shè)置為非零超時(shí)值。

補(bǔ)充:close 標(biāo)記 TCP socket 為已關(guān)閉,不可作為讀寫(xiě)數(shù)據(jù)的第一個(gè)參數(shù):

// Linux
#include <unistd.h>
int close(int fd);

注意:close 只是使 socket 描述字的引用計(jì)數(shù) -1,當(dāng)引用計(jì)數(shù)為 0 才會(huì)觸發(fā) TCP 客戶端向服務(wù)器發(fā)送終止連接請(qǐng)求。

10. 停止使用 WSACleanup

int WSACleanup();
  • 返回值:

    • 無(wú)異常返回 0;

    • 否則,返回 SOCKET_ERROR 值,調(diào)用 ?WSAGetLastError?來(lái)檢索特定的錯(cuò)誤代碼。

      錯(cuò)誤代碼 意義
      WSANOTINITIALISED* 未初始化調(diào)用?WSAStartup
      WSAENETDOWN 網(wǎng)絡(luò)子系統(tǒng)出現(xiàn)故障
      WSAEINPROGRESS 阻止 Windows 套接字 1.1 調(diào)用正在進(jìn)行中,或者服務(wù)提供商仍在處理回調(diào)函數(shù)。

實(shí)例

服務(wù)端

#include <stdio.h>  
#include <winsock2.h>  

#pragma comment(lib,"ws2_32.lib")  

int main(int argc, char* argv[])  
{  
    //初始化WSA  
    WORD sockVersion = MAKEWORD(2,2);  
    WSADATA wsaData;  
    if(WSAStartup(sockVersion, &wsaData)!=0)  
    {  
        return 0;  
    }  

    //創(chuàng)建套接字  
    SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  
    if(slisten == INVALID_SOCKET)  
    {  
        printf("socket error !");  
        return 0;  
    }  

    //綁定IP和端口  
    sockaddr_in sin;  
    sin.sin_family = AF_INET;  
    sin.sin_port = htons(8888);  
    sin.sin_addr.S_un.S_addr = INADDR_ANY;   
    if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)  
    {  
        printf("bind error !");  
    }  

    //開(kāi)始監(jiān)聽(tīng)  
    if(listen(slisten, 5) == SOCKET_ERROR)  
    {  
        printf("listen error !");  
        return 0;  
    }  

    //循環(huán)接收數(shù)據(jù)  
    SOCKET sClient;  
    sockaddr_in remoteAddr;  
    int nAddrlen = sizeof(remoteAddr);  
    char revData[255];   
    while (true)  
    {  
        printf("等待連接...\n");  
        sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);  
        if(sClient == INVALID_SOCKET)  
        {  
            printf("accept error !");  
            continue;  
        }  
        printf("接受到一個(gè)連接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));  

        //接收數(shù)據(jù)  
        int ret = recv(sClient, revData, 255, 0);         
        if(ret > 0)  
        {  
            revData[ret] = 0x00;  
            printf(revData);  
        }  

        //發(fā)送數(shù)據(jù)  
        const char * sendData = "你好,TCP客戶端!\n";  
        send(sClient, sendData, strlen(sendData), 0);  
        closesocket(sClient);  
    }  

    closesocket(slisten);  
    WSACleanup();  
    return 0;  
} 

客戶端

#include<WINSOCK2.H>
#include<STDIO.H>
#include<iostream>
#include<cstring>
using namespace std;
#pragma comment(lib, "ws2_32.lib")

int main()
{
    WORD sockVersion = MAKEWORD(2, 2);
    WSADATA data;
    if(WSAStartup(sockVersion, &data)!=0)
    {
        return 0;
    }
    while(true){
        SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if(sclient == INVALID_SOCKET)
        {
            printf("invalid socket!");
            return 0;
        }

        sockaddr_in serAddr;
        serAddr.sin_family = AF_INET;
        serAddr.sin_port = htons(8888);
        serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
        if(connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
        {  //連接失敗 
            printf("connect error !");
            closesocket(sclient);
            return 0;
        }

        string data;
        cin>>data;
        const char * sendData;
        sendData = data.c_str();   //string轉(zhuǎn)const char* 
        //char * sendData = "你好,TCP服務(wù)端,我是客戶端\n";
        send(sclient, sendData, strlen(sendData), 0);
        //send()用來(lái)將數(shù)據(jù)由指定的socket傳給對(duì)方主機(jī)
        //int send(int s, const void * msg, int len, unsigned int flags)
        //s為已建立好連接的socket,msg指向數(shù)據(jù)內(nèi)容,len則為數(shù)據(jù)長(zhǎng)度,參數(shù)flags一般設(shè)0
        //成功則返回實(shí)際傳送出去的字符數(shù),失敗返回-1,錯(cuò)誤原因存于error 

        char recData[255];
        int ret = recv(sclient, recData, 255, 0);
        if(ret>0){
            recData[ret] = 0x00;
            printf(recData);
        } 
        closesocket(sclient);
    }

    WSACleanup();
    return 0;    
} 

異常

  • undefined reference to '_imp_WSAStartup‘

    解決方案:vs 屬性工具 -> 編譯選項(xiàng) -> 鏈接器命令行 -> 命令添加 -lwsock32。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-632550.html

到了這里,關(guān)于c++: websocket 客戶端與服務(wù)端之間的連接交互的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++實(shí)現(xiàn)websocket服務(wù)端客戶端(基于boost,親測(cè)可行!)

    ?? 整篇文章基本參考了https://blog.csdn.net/jianghuan0122/article/details/123528907,文章記錄了如何在現(xiàn)有條件下實(shí)現(xiàn)該參考示例(參考示例存在報(bào)錯(cuò),并且參考示例沒(méi)有介紹環(huán)境安裝,正確源碼附于文末) ?? 自身環(huán)境:ubuntu18.04+gcc7.5.0+boost1.7,3 ??gcc或者g++一般都有,這里主要介紹

    2024年02月11日
    瀏覽(19)
  • 如何將本地websocket服務(wù)端從本地暴露至公網(wǎng)實(shí)現(xiàn)客戶端遠(yuǎn)程連接

    如何將本地websocket服務(wù)端從本地暴露至公網(wǎng)實(shí)現(xiàn)客戶端遠(yuǎn)程連接

    1. Java 服務(wù)端demo環(huán)境 jdk1.8 框架:springboot+maven 工具IDEA 2. 在pom文件引入第三包封裝的netty框架maven坐標(biāo) 注意:pom文件里需注釋掉springbootweb啟動(dòng)器,web啟動(dòng)器默認(rèn)是tomcat服務(wù)啟動(dòng),會(huì)和netty服務(wù)沖突 3. 創(chuàng)建服務(wù)端,以接口模式調(diào)用,方便外部調(diào)用 4. 啟動(dòng)服務(wù),出現(xiàn)以下信息表示啟動(dòng)成功

    2024年04月10日
    瀏覽(29)
  • java后端使用websocket實(shí)現(xiàn)與客戶端之間接收及發(fā)送消息

    客戶端請(qǐng)求websocket接口,連接通道=》我這邊業(yè)務(wù)成功客戶端發(fā)消息=》客戶端自動(dòng)刷新。 接口:ws://localhost:8080/websocket/xx 經(jīng)測(cè)試,成功 如果是線上服務(wù)器連接,則需要在nginx里配置websocket相關(guān)內(nèi)容,再重啟nginx,代碼如下 本地連接的時(shí)候用的是ws://,因?yàn)槭莌ttp鏈接,但是如果是

    2024年02月16日
    瀏覽(26)
  • WebSocket 實(shí)現(xiàn)長(zhǎng)連接及通過(guò)WebSocket獲取客戶端IP

    WebSocket 是一種支持雙向通訊的網(wǎng)絡(luò)通信協(xié)議。 實(shí)現(xiàn)過(guò)程: 1 添加ServerEndpointExporter配置bean 2 實(shí)現(xiàn)過(guò)程 需求是通過(guò)WebSocket,建立長(zhǎng)連接,并獲取當(dāng)前在線的人數(shù)。通過(guò)Websocket 不斷發(fā)送消息,建立長(zhǎng)連接,給Session續(xù)命。我是通過(guò)MAC地址,區(qū)分不同的設(shè)備,因?yàn)槲业男枨笾行枰?/p>

    2024年02月09日
    瀏覽(31)
  • 【go】gorilla/websocket如何判斷客戶端強(qiáng)制斷開(kāi)連接

    當(dāng)客戶端因?yàn)槟承﹩?wèn)題異常關(guān)閉連接時(shí),可以判斷關(guān)閉連接的異常類(lèi)型 通過(guò)調(diào)用websocket.IsCloseError或websocket.IsUnexpectedCloseError即可 其中g(shù)ithub源碼如下 異常類(lèi)型如下

    2024年02月16日
    瀏覽(56)
  • 實(shí)現(xiàn)c++輕量級(jí)別websocket協(xié)議客戶端

    實(shí)現(xiàn)c++輕量級(jí)別websocket協(xié)議客戶端

    因以前發(fā)過(guò)這個(gè)代碼,但是一直沒(méi)有整理,這次整理了一下,持續(xù)修改,主要是要使用在arm的linux上,發(fā)送接收的數(shù)據(jù)壓縮成圖片發(fā)送出去。 要達(dá)到輕量websocket 使用,必須要達(dá)到幾個(gè)方面才能足夠簡(jiǎn)單, 1、不用加入其他的庫(kù) 2、只需要使用頭文件包含就可以 3、跨平臺(tái) 如果

    2024年02月12日
    瀏覽(21)
  • UE5- c++ websocket客戶端寫(xiě)法

    UE5- c++ websocket客戶端寫(xiě)法

    ue5 c++ 實(shí)現(xiàn)socket客戶端,讀取服務(wù)端數(shù)據(jù),并進(jìn)行解析 {projectName}.Build.cs里增加?\\\"WebSockets\\\",\\\"JsonUtilities\\\", \\\"Json\\\"配置信息,最終輸出如下: 說(shuō)明,其中myue521是我的模塊名,文件名為myue521.Build.cs。 新增的模塊:\\\"WebSockets\\\",\\\"JsonUtilities\\\", \\\"Json\\\"。 準(zhǔn)備實(shí)現(xiàn)自己的webscoket_client。具體操作

    2024年02月10日
    瀏覽(23)
  • Springboot 集成WebSocket作為客戶端,含重連接功能,開(kāi)箱即用

    使用演示 只需要init后調(diào)用sendMessage方法即可,做到開(kāi)箱即用。內(nèi)部封裝了失敗重連接、斷線重連接等功能。 基于Springboot工程 引入websocket依賴 開(kāi)箱即用的工具類(lèi)

    2024年02月04日
    瀏覽(36)
  • 客戶端和服務(wù)端信息交互模型

    客戶端和服務(wù)端信息交互模型

    什么是客戶端和服務(wù)端? 客戶端:可以向服務(wù)器發(fā)請(qǐng)求,并接收返回的內(nèi)容進(jìn)行處理 服務(wù)器端:能夠接收客戶端請(qǐng)求,并且把相關(guān)資源信息返回給客戶端的 當(dāng)用戶在地址欄中輸入網(wǎng)址,到最后看到頁(yè)面,中間都經(jīng)歷了什么? 后面會(huì)詳細(xì)解析每個(gè)步驟干的事 A: URI / URL /URN U

    2024年02月03日
    瀏覽(23)
  • SpringBoot+WebSocket實(shí)現(xiàn)服務(wù)端、客戶端

    SpringBoot+WebSocket實(shí)現(xiàn)服務(wù)端、客戶端

    小編最近一直在使用springboot框架開(kāi)發(fā)項(xiàng)目,畢竟現(xiàn)在很多公司都在采用此框架,之后小編也會(huì)陸續(xù)寫(xiě)關(guān)于springboot開(kāi)發(fā)常用功能的文章。 什么場(chǎng)景下會(huì)要使用到websocket的呢? websocket主要功能就是實(shí)現(xiàn)網(wǎng)絡(luò)通訊,比如說(shuō)最經(jīng)典的客服聊天窗口、您有新的消息通知,或者是項(xiàng)目與

    2024年02月13日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包