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

【探索Linux】—— 強(qiáng)大的命令行工具 P.26(網(wǎng)絡(luò)編程套接字基本概念—— socket編程接口 | socket編程接口相關(guān)函數(shù)詳細(xì)介紹 )

這篇具有很好參考價(jià)值的文章主要介紹了【探索Linux】—— 強(qiáng)大的命令行工具 P.26(網(wǎng)絡(luò)編程套接字基本概念—— socket編程接口 | socket編程接口相關(guān)函數(shù)詳細(xì)介紹 )。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【探索Linux】—— 強(qiáng)大的命令行工具 P.26(網(wǎng)絡(luò)編程套接字基本概念—— socket編程接口 | socket編程接口相關(guān)函數(shù)詳細(xì)介紹 ),Linux,linux,網(wǎng)絡(luò),運(yùn)維

引言

本文將深入探討使用套接字進(jìn)行網(wǎng)絡(luò)通信的基本步驟,包括創(chuàng)建套接字、綁定地址、監(jiān)聽連接(對于服務(wù)器端)、連接遠(yuǎn)程主機(jī)(對于客戶端)、以及發(fā)送和接收數(shù)據(jù)等操作。套接字編程涉及一系列系統(tǒng)調(diào)用和函數(shù),如 socket()bind()、listen()connect()、send()、recv() 等。開發(fā)人員可以利用這些接口實(shí)現(xiàn)各種網(wǎng)絡(luò)應(yīng)用。通過本文,讀者將了解如何使用套接字進(jìn)行網(wǎng)絡(luò)通信,并掌握關(guān)鍵步驟和函數(shù)調(diào)用,為構(gòu)建網(wǎng)絡(luò)應(yīng)用打下堅(jiān)實(shí)基礎(chǔ)。

一、socket 常見API表

函數(shù) 描述
socket() 創(chuàng)建一個(gè)新的套接字
bind() 將套接字綁定到特定的IP地址和端口號上
listen() 將套接字標(biāo)記為被動套接字,用于監(jiān)聽連接請求
accept() 接受客戶端的連接請求,并返回一個(gè)新的套接字用于通信
connect() 建立與服務(wù)器端的連接
send() 發(fā)送數(shù)據(jù)
recv() 接收數(shù)據(jù)
sendto() 用于UDP協(xié)議中發(fā)送數(shù)據(jù)
recvfrom() 用于UDP協(xié)議中接收數(shù)據(jù)
close() 關(guān)閉套接字連接
select() 多路復(fù)用,同時(shí)監(jiān)視多個(gè)套接字的狀態(tài)
getaddrinfo() 主機(jī)名和服務(wù)名之間的轉(zhuǎn)換
setsockopt() 設(shè)置套接字選項(xiàng)
getsockopt() 獲取套接字選項(xiàng)的值
inet_pton() IP地址的轉(zhuǎn)換
inet_ntop() IP地址的轉(zhuǎn)換
htons() 主機(jī)字節(jié)序和網(wǎng)絡(luò)字節(jié)序之間的轉(zhuǎn)換(16位整數(shù))
ntohs() 主機(jī)字節(jié)序和網(wǎng)絡(luò)字節(jié)序之間的轉(zhuǎn)換(16位整數(shù))
htonl() 主機(jī)字節(jié)序和網(wǎng)絡(luò)字節(jié)序之間的轉(zhuǎn)換(32位整數(shù))
ntohl() 主機(jī)字節(jié)序和網(wǎng)絡(luò)字節(jié)序之間的轉(zhuǎn)換(32位整數(shù))

二、函數(shù)詳細(xì)介紹

01. socket()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:int socket(int domain, int type, int protocol);

  • 參數(shù)類型

    • domain:協(xié)議族(如AF_INET、AF_INET6等)
    • type:套接字類型(如SOCK_STREAM、SOCK_DGRAM等)
    • protocol:具體使用的協(xié)議(如IPPROTO_TCP、IPPROTO_UDP等)
  • 應(yīng)用示例

    int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    

02. bind()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

  • 參數(shù)類型

    • sockfd:套接字描述符
    • addr:指向要綁定的地址結(jié)構(gòu)的指針
    • addrlen:地址結(jié)構(gòu)的長度
  • 應(yīng)用示例

    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(12345);
    server_address.sin_addr.s_addr = INADDR_ANY;
    bind(sockfd, (struct sockaddr *)&server_address, sizeof(server_address));
    

03. listen()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:int listen(int sockfd, int backlog);

  • 參數(shù)類型

    • sockfd:套接字描述符
    • backlog:未完成連接隊(duì)列的最大長度
  • 應(yīng)用示例

    listen(sockfd, 5);
    

04. accept()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

  • 參數(shù)類型

    • sockfd:套接字描述符
    • addr:指向結(jié)構(gòu)體的指針,用于存儲客戶端地址信息
    • addrlen:地址結(jié)構(gòu)的長度
  • 應(yīng)用示例

    int client_sockfd = accept(sockfd, (struct sockaddr *)&client_address, &addr_len);
    

05. connect()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

  • 參數(shù)類型

    • sockfd:套接字描述符
    • addr:指向要連接的目標(biāo)地址結(jié)構(gòu)的指針
    • addrlen:地址結(jié)構(gòu)的長度
  • 應(yīng)用示例

    connect(sockfd, (struct sockaddr *)&server_address, sizeof(server_address));
    

06. send()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:ssize_t send(int sockfd, const void *buf, size_t len, int flags);

  • 參數(shù)類型

    • sockfd:套接字描述符
    • buf:指向待發(fā)送數(shù)據(jù)的指針
    • len:待發(fā)送數(shù)據(jù)的長度
    • flags:傳輸控制標(biāo)志
  • 應(yīng)用示例

    char *message = "Hello, server!";
    send(sockfd, message, strlen(message), 0);
    

07. recv()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:ssize_t recv(int sockfd, void *buf, size_t len, int flags);

  • 參數(shù)類型

    • sockfd:套接字描述符
    • buf:指向存儲接收數(shù)據(jù)的緩沖區(qū)
    • len:接收數(shù)據(jù)的最大長度
    • flags:接收操作的附加選項(xiàng)
  • 應(yīng)用示例

    char buffer[1024];
    ssize_t bytes_received = recv(sockfd, buffer, 1024, 0);
    

08. close()

  • 頭文件:#include <unistd.h>

  • 函數(shù)原型:int close(int sockfd);

  • 參數(shù)類型

    • sockfd:要關(guān)閉的套接字描述符
  • 應(yīng)用示例

    close(sockfd);
    

09. select()

  • 頭文件:#include <sys/select.h>

  • 函數(shù)原型:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

  • 參數(shù)類型

    • nfds:所有文件描述符的范圍(最大文件描述符+1)
    • readfds:可讀文件描述符集合
    • writefds:可寫文件描述符集合
    • exceptfds:異常文件描述符集合
    • timeout:超時(shí)時(shí)間
  • 應(yīng)用示例

    fd_set readfds;
    FD_ZERO(&readfds);
    FD_SET(sockfd, &readfds);
    int activity = select(sockfd + 1, &readfds, NULL, NULL, NULL);
    

10. getaddrinfo()

  • 頭文件:#include <sys/types.h>
    #include <sys/socket.h>
    #include <netdb.h>

  • 函數(shù)原型:int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);

  • 參數(shù)類型

    • node:主機(jī)名或IP地址字符串
    • service:服務(wù)名或端口號字符串
    • hints:指向地址信息結(jié)構(gòu)的指針,用于設(shè)置期望的返回結(jié)果
    • res:指向存儲結(jié)果的鏈表的指針
  • 應(yīng)用示例

    struct addrinfo hints, *res;
    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    getaddrinfo("www.example.com", "http", &hints, &res);
    

11. sendto()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

  • 參數(shù)類型

    • sockfd:套接字描述符
    • buf:指向待發(fā)送數(shù)據(jù)的指針
    • len:待發(fā)送數(shù)據(jù)的長度
    • flags:傳輸控制標(biāo)志
    • dest_addr:目標(biāo)地址結(jié)構(gòu)
    • addrlen:目標(biāo)地址結(jié)構(gòu)的長度
  • 應(yīng)用示例

    char *message = "Hello, server!";
    sendto(sockfd, message, strlen(message), 0, (struct sockaddr *)&server_address, sizeof(server_address));
    

12. recvfrom()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);

  • 參數(shù)類型

    • sockfd:套接字描述符
    • buf:指向存儲接收數(shù)據(jù)的緩沖區(qū)
    • len:接收數(shù)據(jù)的最大長度
    • flags:接收操作的附加選項(xiàng)
    • src_addr:發(fā)送方地址結(jié)構(gòu)
    • addrlen:發(fā)送方地址結(jié)構(gòu)的長度
  • 應(yīng)用示例

    char buffer[1024];
    struct sockaddr_in client_address;
    socklen_t addr_len = sizeof(client_address);
    ssize_t bytes_received = recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr *)&client_address, &addr_len);
    

13. setsockopt()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

  • 參數(shù)類型

    • sockfd:套接字描述符
    • level:選項(xiàng)所在的協(xié)議層
    • optname:選項(xiàng)名
    • optval:指向設(shè)置選項(xiàng)值的指針
    • optlen:選項(xiàng)值的長度
  • 應(yīng)用示例

    int reuse = 1;
    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));
    

14. getsockopt()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);

  • 參數(shù)類型

    • sockfd:套接字描述符
    • level:選項(xiàng)所在的協(xié)議層
    • optname:選項(xiàng)名
    • optval:指向存儲選項(xiàng)值的緩沖區(qū)
    • optlen:輸入時(shí)為緩沖區(qū)大小,輸出時(shí)為實(shí)際選項(xiàng)值的長度
  • 應(yīng)用示例

    int buffer_size;
    socklen_t optlen = sizeof(buffer_size);
    getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &buffer_size, &optlen);
    

15. shutdown()

  • 頭文件:#include <sys/socket.h>

  • 函數(shù)原型:int shutdown(int sockfd, int how);

  • 參數(shù)類型

    • sockfd:套接字描述符
    • how:關(guān)閉連接的方式,常用的取值為:
      • SHUT_RD:關(guān)閉讀端
      • SHUT_WR:關(guān)閉寫端
      • SHUT_RDWR:同時(shí)關(guān)閉讀寫端
  • 應(yīng)用示例

    shutdown(sockfd, SHUT_RDWR);
    

16. inet_pton()

  • 頭文件:#include <arpa/inet.h>

  • 函數(shù)原型:int inet_pton(int af, const char *src, void *dst);

  • 參數(shù)類型

    • af:地址族,如AF_INET(IPv4)或AF_INET6(IPv6)
    • src:待轉(zhuǎn)換的點(diǎn)分十進(jìn)制字符串形式的地址
    • dst:存儲轉(zhuǎn)換后的二進(jìn)制格式地址的緩沖區(qū)
  • 應(yīng)用示例

    struct sockaddr_in server_address;
    inet_pton(AF_INET, "127.0.0.1", &(server_address.sin_addr));
    

17. htons() / htonl() / ntohs() / ntohl()

這些函數(shù)用于主機(jī)字節(jié)序和網(wǎng)絡(luò)字節(jié)序之間的轉(zhuǎn)換,分別用于16位和32位整數(shù)的主機(jī)到網(wǎng)絡(luò)字節(jié)序以及網(wǎng)絡(luò)到主機(jī)字節(jié)序的轉(zhuǎn)換。

  • 頭文件:#include <arpa/inet.h>

  • 函數(shù)原型

    • uint16_t htons(uint16_t hostshort);
    • uint32_t htonl(uint32_t hostlong);
    • uint16_t ntohs(uint16_t netshort);
    • uint32_t ntohl(uint32_t netlong);

這些函數(shù)在實(shí)際網(wǎng)絡(luò)編程中經(jīng)常用于端口號和IP地址等數(shù)據(jù)的轉(zhuǎn)換。

溫馨提示

感謝您對博主文章的關(guān)注與支持!如果您喜歡這篇文章,可以點(diǎn)贊、評論和分享給您的同學(xué),這將對我提供巨大的鼓勵(lì)和支持。另外,我計(jì)劃在未來的更新中持續(xù)探討與本文相關(guān)的內(nèi)容。我會為您帶來更多關(guān)于Linux以及C++編程技術(shù)問題的深入解析、應(yīng)用案例和趣味玩法等。如果感興趣的話可以關(guān)注博主的更新,不要錯(cuò)過任何精彩內(nèi)容!

再次感謝您的支持和關(guān)注。我們期待與您建立更緊密的互動,共同探索Linux、C++、算法和編程的奧秘。祝您生活愉快,排便順暢!
【探索Linux】—— 強(qiáng)大的命令行工具 P.26(網(wǎng)絡(luò)編程套接字基本概念—— socket編程接口 | socket編程接口相關(guān)函數(shù)詳細(xì)介紹 ),Linux,linux,網(wǎng)絡(luò),運(yùn)維文章來源地址http://www.zghlxwxcb.cn/news/detail-838128.html

到了這里,關(guān)于【探索Linux】—— 強(qiáng)大的命令行工具 P.26(網(wǎng)絡(luò)編程套接字基本概念—— socket編程接口 | socket編程接口相關(guān)函數(shù)詳細(xì)介紹 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【探索Linux】—— 強(qiáng)大的命令行工具 P.3(Linux開發(fā)工具 vim)

    【探索Linux】—— 強(qiáng)大的命令行工具 P.3(Linux開發(fā)工具 vim)

    前面我們講了C語言的基礎(chǔ)知識,也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的一些知識,也學(xué)習(xí)了一些Linux的基本操作,也相信大家都掌握的不錯(cuò),今天博主帶大家了解一下Linux開發(fā)工具—— vim ,下面話不多說坐穩(wěn)扶好咱們要開車了?。?!?? Vim(Vi IMproved)是一款在Unix和類

    2024年02月12日
    瀏覽(54)
  • 【探索Linux】—— 強(qiáng)大的命令行工具 P.2(Linux下基本指令)

    【探索Linux】—— 強(qiáng)大的命令行工具 P.2(Linux下基本指令)

    ? ? ? ? 前面我們講了C語言的基礎(chǔ)知識,也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的一些知識,也相信大家都掌握的不錯(cuò),今天博主將會新開一個(gè)Linux專題,帶領(lǐng)大家繼續(xù)學(xué)習(xí)有關(guān)Linux的內(nèi)容。今天第一篇文章博主首先帶領(lǐng)大家了解一下什么是Linux,以及Linux的幾個(gè)常用命令符

    2024年02月14日
    瀏覽(22)
  • 【探索Linux】—— 步步學(xué)習(xí)強(qiáng)大的命令行工具 P.1(Linux簡介)

    【探索Linux】—— 步步學(xué)習(xí)強(qiáng)大的命令行工具 P.1(Linux簡介)

    目錄 前言 一、Linux簡介 二、linux的不同發(fā)行版本 三、Linux的開源性質(zhì) 四、Linux的特點(diǎn)? 五、Linux代碼演示(僅供參考)? 總結(jié) ? ? ? ? 前面我們講了C語言的基礎(chǔ)知識,也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的一些知識,也相信大家都掌握的不錯(cuò),今天博主將會新開一個(gè)L

    2024年02月14日
    瀏覽(22)
  • 【探索Linux】—— 強(qiáng)大的命令行工具 P.5(yum工具、git 命令行提交代碼)

    【探索Linux】—— 強(qiáng)大的命令行工具 P.5(yum工具、git 命令行提交代碼)

    前面我們講了C語言的基礎(chǔ)知識,也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的一些知識,也學(xué)習(xí)了一些Linux的基本操作,也了解并學(xué)習(xí)了有關(guān)Linux開發(fā)工具vim 、gcc/g++ 使用,也相信大家都掌握的不錯(cuò),今天博主帶大家了解一下 —— yum工具以及git 命令行提交代碼 , 下面話不多說

    2024年02月12日
    瀏覽(24)
  • 【探索Linux】—— 強(qiáng)大的命令行工具 P.9(進(jìn)程地址空間)

    【探索Linux】—— 強(qiáng)大的命令行工具 P.9(進(jìn)程地址空間)

    前面我們講了C語言的基礎(chǔ)知識,也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的一些知識,也學(xué)習(xí)了一些Linux的基本操作,也了解并學(xué)習(xí)了有關(guān)Linux開發(fā)工具vim 、gcc/g++ 使用、yum工具以及git 命令行提交代碼也相信大家都掌握的不錯(cuò),上一篇文章我們了解了關(guān)于進(jìn)程的基本概念,今

    2024年02月08日
    瀏覽(28)
  • 【探索Linux】—— 強(qiáng)大的命令行工具 P.7(進(jìn)程 · 進(jìn)程的概念)

    【探索Linux】—— 強(qiáng)大的命令行工具 P.7(進(jìn)程 · 進(jìn)程的概念)

    前面我們講了C語言的基礎(chǔ)知識,也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的一些知識,也學(xué)習(xí)了一些Linux的基本操作,也了解并學(xué)習(xí)了有關(guān)Linux開發(fā)工具vim 、gcc/g++ 使用、yum工具以及git 命令行提交代碼也相信大家都掌握的不錯(cuò),今天博主帶大家了解一下 —— 進(jìn)程(進(jìn)程的概

    2024年02月10日
    瀏覽(21)
  • 【探索Linux】P.28(網(wǎng)絡(luò)編程套接字 —— 簡單的UDP網(wǎng)絡(luò)程序模擬實(shí)現(xiàn))

    【探索Linux】P.28(網(wǎng)絡(luò)編程套接字 —— 簡單的UDP網(wǎng)絡(luò)程序模擬實(shí)現(xiàn))

    在前一篇文章中,我們詳細(xì)介紹了UDP協(xié)議和TCP協(xié)議的特點(diǎn)以及它們之間的異同點(diǎn)。 本文將延續(xù)上文內(nèi)容,重點(diǎn)討論簡單的UDP網(wǎng)絡(luò)程序模擬實(shí)現(xiàn) 。通過本文的學(xué)習(xí),讀者將能夠深入了解UDP協(xié)議的實(shí)際應(yīng)用,并掌握如何編寫簡單的UDP網(wǎng)絡(luò)程序。讓我們一起深入探討UDP網(wǎng)絡(luò)程序的

    2024年04月08日
    瀏覽(584)
  • 【探索Linux】P.29(網(wǎng)絡(luò)編程套接字 —— 簡單的TCP網(wǎng)絡(luò)程序模擬實(shí)現(xiàn))

    【探索Linux】P.29(網(wǎng)絡(luò)編程套接字 —— 簡單的TCP網(wǎng)絡(luò)程序模擬實(shí)現(xiàn))

    在前一篇文章中,我們詳細(xì)介紹了UDP協(xié)議和TCP協(xié)議的特點(diǎn)以及它們之間的異同點(diǎn)。 本文將延續(xù)上文內(nèi)容,重點(diǎn)討論簡單的TCP網(wǎng)絡(luò)程序模擬實(shí)現(xiàn) 。通過本文的學(xué)習(xí),讀者將能夠深入了解TCP協(xié)議的實(shí)際應(yīng)用,并掌握如何編寫簡單的TCP網(wǎng)絡(luò)程序。讓我們一起深入探討TCP網(wǎng)絡(luò)程序的

    2024年04月14日
    瀏覽(97)
  • 【探索Linux】P.25(網(wǎng)絡(luò)編程套接字基本概念 —— 預(yù)備知識)

    【探索Linux】P.25(網(wǎng)絡(luò)編程套接字基本概念 —— 預(yù)備知識)

    在上一篇文章中,我們深入探討了Linux網(wǎng)絡(luò)的基礎(chǔ)知識和它的發(fā)展歷史,為讀者揭開了Linux網(wǎng)絡(luò)技術(shù)演變的序幕。我們了解到,Linux網(wǎng)絡(luò)技術(shù)的發(fā)展不僅促進(jìn)了操作系統(tǒng)本身的成熟,還對整個(gè)互聯(lián)網(wǎng)的進(jìn)步產(chǎn)生了深遠(yuǎn)的影響。隨著網(wǎng)絡(luò)技術(shù)的不斷進(jìn)步,Linux系統(tǒng)在網(wǎng)絡(luò)通信方面

    2024年04月27日
    瀏覽(95)
  • 【探索Linux】—— 強(qiáng)大的命令行工具 P.22(POSIX信號量)

    【探索Linux】—— 強(qiáng)大的命令行工具 P.22(POSIX信號量)

    在上一篇文章中,我們深入探討了多線程編程的核心概念,包括線程同步、條件變量以及線程安全等關(guān)鍵技術(shù),為讀者揭示了并發(fā)編程的復(fù)雜性及其解決方案。這些概念和技術(shù)是實(shí)現(xiàn)高效、穩(wěn)定并發(fā)應(yīng)用程序的基礎(chǔ)。繼續(xù)在并發(fā)編程的旅途上前進(jìn),本篇文章將引導(dǎo)我們走進(jìn)

    2024年02月20日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包