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

【網(wǎng)絡(luò)編程】socket套接字

這篇具有很好參考價(jià)值的文章主要介紹了【網(wǎng)絡(luò)編程】socket套接字。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、源IP和目的IP

如果我們的臺(tái)式機(jī)或者筆記本沒(méi)有IP地址就無(wú)法上網(wǎng),而因?yàn)槊颗_(tái)主機(jī)都有IP地址,所以注定了數(shù)據(jù)從一臺(tái)主機(jī)傳輸?shù)搅硪慌_(tái)主機(jī)一定有源IP和目的IP。
所以在報(bào)頭中就會(huì)包含源IP和目的IP。

而我們把數(shù)據(jù)從一臺(tái)主機(jī)傳遞到另一臺(tái)主機(jī)并不是目的,真正通信的其實(shí)是應(yīng)用層上的軟件。
【網(wǎng)絡(luò)編程】socket套接字
而我們知道應(yīng)用層可不止一個(gè)軟件

那么我們現(xiàn)在就有了問(wèn)題:
既然有了公網(wǎng)IP標(biāo)識(shí)了一臺(tái)唯一的主機(jī),那么數(shù)據(jù)就可以由一臺(tái)主機(jī)傳遞到另一臺(tái)主機(jī)。但是有這么多的軟件(進(jìn)程),怎么保證軟件A發(fā)送的被軟件B接收呢?
換句話說(shuō):用什么來(lái)標(biāo)識(shí)主機(jī)上的進(jìn)程的唯一性呢?

二、端口號(hào)port

為了更好的表示一臺(tái)主機(jī)上服務(wù)進(jìn)程的唯一性,規(guī)定用端口號(hào)port標(biāo)識(shí)服務(wù)進(jìn)程、客戶(hù)端進(jìn)程的唯一性。

端口號(hào):

1?? 端口號(hào)是一個(gè)2字節(jié)16位的整數(shù)
2?? 端口號(hào)用來(lái)標(biāo)識(shí)一個(gè)進(jìn)程,告訴操作系統(tǒng)要把數(shù)據(jù)交給哪一個(gè)進(jìn)程
3?? 一個(gè)端口號(hào)只能被一個(gè)進(jìn)程占用(同一個(gè)主機(jī))

由上面可以知道:
IP地址(標(biāo)識(shí)唯一主機(jī))+ 端口號(hào)(標(biāo)識(shí)唯一進(jìn)程)能夠標(biāo)識(shí)網(wǎng)絡(luò)上的某一臺(tái)主機(jī)的某一個(gè)進(jìn)程(全網(wǎng)唯一進(jìn)程)。

那么網(wǎng)絡(luò)通信的本質(zhì)就是進(jìn)程間通信。
而我們之前說(shuō)過(guò)進(jìn)程間通信的本質(zhì)是看到同一份資源現(xiàn)在這個(gè)資源就是網(wǎng)絡(luò)。
而通信的本質(zhì)就是IO,因?yàn)槲覀兩暇W(wǎng)的行為就兩種情況:1.把數(shù)據(jù)發(fā)送出去 2.接收到數(shù)據(jù)。

這里再思考一個(gè)問(wèn)題,我們標(biāo)識(shí)一個(gè)進(jìn)程有pid,那么為什么還需要端口號(hào)呢?

1?? 首先pid是系統(tǒng)規(guī)定的,而port是網(wǎng)絡(luò)規(guī)定的,這樣就可以把系統(tǒng)和網(wǎng)絡(luò)解耦
2?? port標(biāo)識(shí)服務(wù)器的唯一性不能做任何改變,要讓客戶(hù)端能找到服務(wù)器,就像110,120樣不能被改變。而pid每次啟動(dòng)進(jìn)程pid就會(huì)改變。
3?? 不是所有的進(jìn)程都需要提供網(wǎng)絡(luò)服務(wù)或請(qǐng)求(不需要port),但每個(gè)進(jìn)程都需要pid。

雖然一個(gè)端口號(hào)只能綁定一個(gè)進(jìn)程,但是一個(gè)進(jìn)程可以綁定多個(gè)端口號(hào)。

上面我們說(shuō)了IP有源IP和目的IP,而這里的port也有源端口號(hào)和目的端口號(hào)。我們?cè)诎l(fā)送數(shù)據(jù)的時(shí)候也要把自己的IP和端口號(hào)發(fā)送過(guò)去,因?yàn)閿?shù)據(jù)還要被發(fā)送回來(lái)。所以發(fā)送數(shù)據(jù)的時(shí)候一定會(huì)多出一部分?jǐn)?shù)據(jù)(以協(xié)議的形式呈現(xiàn))。

有人可能會(huì)問(wèn)那么第一次怎么知道給哪個(gè)IP和port發(fā)送,這個(gè)不用擔(dān)心,因?yàn)榉?wù)器內(nèi)部已經(jīng)內(nèi)置好了。

三、TCP/UDP協(xié)議

我們用的套接字接口一定會(huì)使用傳輸層協(xié)議,我們不會(huì)繞過(guò)傳輸層去調(diào)用下面的協(xié)議。
【網(wǎng)絡(luò)編程】socket套接字

而傳輸層的協(xié)議分為T(mén)CP協(xié)議和UDP協(xié)議。

對(duì)于TCP協(xié)議有幾個(gè)特點(diǎn):

1?? 傳輸層協(xié)議
2?? 有連接(正式通信前要先建立連接)
3?? 可靠傳輸(在內(nèi)部幫我們做可靠傳輸工作)
4?? 面向字節(jié)流

對(duì)于UDP協(xié)議有幾個(gè)特點(diǎn):

1?? 傳輸層協(xié)議
2?? 無(wú)連接
3?? 不可靠傳輸
4?? 面向數(shù)據(jù)報(bào)

可靠和不可靠傳輸:
不可靠傳輸:比如說(shuō)發(fā)送數(shù)據(jù)時(shí)出現(xiàn)了丟包的情況、或者數(shù)據(jù)被重復(fù)傳遞了(傳遞了多份)、或者網(wǎng)絡(luò)出現(xiàn)了問(wèn)題等等造成的后果就叫做不可靠。

所以傳輸層就是用來(lái)解決可靠性的一個(gè)協(xié)議。

但是為什么UDP不可靠傳輸我們還要有這個(gè)協(xié)調(diào)呢?
這里要注意可不可靠是一個(gè)中性詞。可靠是需要成本的,往往在維護(hù)和編碼上都比較復(fù)雜;
而不可靠沒(méi)有成本,使用起來(lái)也簡(jiǎn)單。
所以要分場(chǎng)景使用。

3.1 網(wǎng)絡(luò)字節(jié)流

我們知道多字節(jié)數(shù)據(jù)存儲(chǔ)的時(shí)候會(huì)有大小端問(wèn)題。
小端:低權(quán)值的數(shù)放入低地址。
大端:低權(quán)值的數(shù)放入高地址。

所以現(xiàn)在就出現(xiàn)了這么一種情況:可能一個(gè)大端機(jī)用大端的方式發(fā)送數(shù)據(jù)到一個(gè)小端機(jī)。
現(xiàn)在跨網(wǎng)絡(luò)我們也不知道數(shù)據(jù)到底是大端和小端

所以就有了規(guī)定:
網(wǎng)絡(luò)中的數(shù)據(jù)都是大端。

發(fā)送數(shù)據(jù)的主機(jī)如果是大端機(jī)就不用管,如果是小端機(jī)就把小端轉(zhuǎn)成大端再發(fā)送。
接收數(shù)據(jù)同理。

那么如何定義網(wǎng)絡(luò)數(shù)據(jù)流的地址呢?

發(fā)送主機(jī)把發(fā)送緩沖區(qū)的數(shù)據(jù)按內(nèi)存的地址從低到高進(jìn)行發(fā)送。
接收主機(jī)把接收緩沖區(qū)的數(shù)據(jù)按內(nèi)存的地址從低到高進(jìn)行接收。
也就是先發(fā)送的數(shù)據(jù)是低地址,后發(fā)送的數(shù)據(jù)是高地址。
TCP/IP協(xié)議規(guī)定,網(wǎng)絡(luò)數(shù)據(jù)流應(yīng)采用大端字節(jié)序,即低地址高字節(jié),不管這臺(tái)主機(jī)是大端機(jī)還是小端機(jī), 都會(huì)按照這個(gè)TCP/IP規(guī)定的網(wǎng)絡(luò)字節(jié)序來(lái)發(fā)送/接收數(shù)據(jù),如果當(dāng)前發(fā)送主機(jī)是小端, 就需要先將數(shù)據(jù)轉(zhuǎn)成大端; 否則就忽略, 直接發(fā)送即可。

而把數(shù)據(jù)轉(zhuǎn)化成大端的工作不用我們自己來(lái)做,可以調(diào)用以下庫(kù)函數(shù)做網(wǎng)絡(luò)字節(jié)序和主機(jī)字節(jié)序的轉(zhuǎn)換。

#include <arpa/inet.h>
// 主機(jī)序列轉(zhuǎn)網(wǎng)絡(luò)序列
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
// 網(wǎng)絡(luò)序列轉(zhuǎn)主機(jī)序列
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);

h表示host,n表示network,l表示32位長(zhǎng)整數(shù),s表示16位短整數(shù)。
主機(jī)是大端還是小端在函數(shù)內(nèi)部會(huì)自己進(jìn)行判斷。
如果主機(jī)是小端字節(jié)序,這些函數(shù)將參數(shù)做相應(yīng)的大小端轉(zhuǎn)換然后返回。
如果主機(jī)是大端字節(jié)序,這些 函數(shù)不做轉(zhuǎn)換,將參數(shù)原封不動(dòng)地返回。

四、socket套接字

前面我們說(shuō)過(guò)IP+端口號(hào)port標(biāo)識(shí)了全網(wǎng)唯一的進(jìn)程,我們IP+port就叫做套接字socket

4.1 socket常見(jiàn)接口

// 創(chuàng)建 socket 文件描述符 (TCP/UDP, 客戶(hù)端 + 服務(wù)器)
int socket(int domain, int type, int protocol);
// 綁定端口號(hào) (TCP/UDP, 服務(wù)器)
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);
// 開(kāi)始監(jiān)聽(tīng)socket (TCP, 服務(wù)器)
int listen(int socket, int backlog);
// 接收請(qǐng)求 (TCP, 服務(wù)器)
int accept(int socket, struct sockaddr* address,
socklen_t* address_len);
// 建立連接 (TCP, 客戶(hù)端)
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

可以發(fā)現(xiàn)函數(shù)參數(shù)里面有個(gè)叫sockaddr的結(jié)構(gòu)體類(lèi)型,這是什么呢?

4.2 sockaddr結(jié)構(gòu)體

其實(shí)套接字有不少種類(lèi)型。
常見(jiàn)的有三種:

網(wǎng)絡(luò)套接字
原始套接字
域間套接字

網(wǎng)絡(luò)套接字主要運(yùn)用于跨主機(jī)之間的通信,也能支持本地通信,而域間套接字只能在本地通信。而原始套接字可以跨過(guò)傳輸層(TCP/IP協(xié)議)訪問(wèn)底層的數(shù)據(jù)。

這些套接字應(yīng)用場(chǎng)景完全不同,所以我們想用就得用三套不同的接口。
而為了方便,設(shè)計(jì)者只使用了一套接口,就可以通過(guò)不同的參數(shù),解決所有的通信場(chǎng)景。

這里舉兩個(gè)具體的套接字類(lèi)型:sockaddr_insockaddr_un

struct sockaddr_in {
    short int sin_family;           // 地址族,一般為AF_INET
    unsigned short int sin_port;    // 端口號(hào),網(wǎng)絡(luò)字節(jié)序
    struct in_addr sin_addr;        // IP地址
    unsigned char sin_zero[8];      // 用于填充,使sizeof(sockaddr_in)等于16
};

struct sockaddr_un {
    sa_family_t sun_family;       /* AF_UNIX */
    char sun_path[108];    /* 帶有路徑的文件名 */
};

【網(wǎng)絡(luò)編程】socket套接字
可以看到sockaddr_insockaddr_un是兩個(gè)不同的通信場(chǎng)景。區(qū)分它們就用16地址類(lèi)型協(xié)議家族的標(biāo)識(shí)符。 我們兩個(gè)結(jié)構(gòu)體都不用,用sockaddr。

比方說(shuō)我們想用網(wǎng)絡(luò)通信,雖然參數(shù)是const struct sockaddr *addr,但實(shí)際傳遞進(jìn)去的卻是sockaddr_in結(jié)構(gòu)體(注意要強(qiáng)制類(lèi)型轉(zhuǎn)換)。
在函數(shù)內(nèi)部一視同仁,全部看成sockaddr類(lèi)型,然后根據(jù)前兩個(gè)字節(jié)判斷到底是什么通信類(lèi)型然后再?gòu)?qiáng)轉(zhuǎn)回去。

我們可以把sockaddr看成基類(lèi),把sockaddr_insockaddr_un看成派生類(lèi),構(gòu)成了多態(tài)體系。

五、總結(jié)

1?? IP+port可以標(biāo)志全網(wǎng)唯一進(jìn)程。
2?? 套接字是一種通信機(jī)制(通信的兩方的一種約定),而套接字的表示形式:IP+port
3?? TCP和UDP的主要區(qū)別就是可靠傳輸和不可靠傳輸,而可不可靠是中性詞。
4?? 網(wǎng)絡(luò)字節(jié)序列簡(jiǎn)單粗暴的規(guī)定為大端。
5?? sockaddr用統(tǒng)一的接口方式來(lái)解決網(wǎng)絡(luò)通信的大部分問(wèn)題。
Socket可以看成在兩個(gè)程序進(jìn)行通訊連接中的一個(gè)端點(diǎn),一個(gè)程序?qū)⒁欢涡畔?xiě)入Socket中,該Socket將這段信息發(fā)送給另外一個(gè)Socket中,使這段信息能傳送到其他程序中。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-431396.html



到了這里,關(guān)于【網(wǎng)絡(luò)編程】socket套接字的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • [JAVAee]網(wǎng)絡(luò)編程-套接字Socket

    [JAVAee]網(wǎng)絡(luò)編程-套接字Socket

    目錄 基本概念 發(fā)送端與接收端 請(qǐng)求與響應(yīng) ?編輯客戶(hù)端與服務(wù)器 Socket套接字? 分類(lèi) 數(shù)據(jù)報(bào)套接字 流套接字傳輸模型?? UDP數(shù)據(jù)報(bào)套接字編程 DatagramSocket API DatagramPacket API InetSocketAddress API 示例一: 示例二: TCP流數(shù)據(jù)報(bào)套接字編程 ServerSocket API Socket API 示例一: ? 網(wǎng)絡(luò)編程指的

    2024年02月13日
    瀏覽(126)
  • 【Python】Python 網(wǎng)絡(luò)編程 ( Socket 套接字簡(jiǎn)介 | Socket 套接字使用步驟 | Socket 套接字服務(wù)端與客戶(hù)端開(kāi)發(fā) )

    【Python】Python 網(wǎng)絡(luò)編程 ( Socket 套接字簡(jiǎn)介 | Socket 套接字使用步驟 | Socket 套接字服務(wù)端與客戶(hù)端開(kāi)發(fā) )

    Socket 套接字 是一種 進(jìn)程之間的 通信機(jī)制 , 通過(guò)套接字可以在 不同的進(jìn)程之間 進(jìn)行數(shù)據(jù)交換 ; 在 網(wǎng)絡(luò)編程 中 , Socket 套接字 主要用于 客戶(hù)端 與 服務(wù)器 之間的 通信 , 大部分 網(wǎng)絡(luò)相關(guān)的應(yīng)用程序 , 都使用到了 Socket 套接字技術(shù) ; 套接字有兩種類(lèi)型 : 流套接字 : 提供了一個(gè)可

    2024年02月15日
    瀏覽(604)
  • 網(wǎng)絡(luò)編程『socket套接字 ‖ 簡(jiǎn)易UDP網(wǎng)絡(luò)程序』

    網(wǎng)絡(luò)編程『socket套接字 ‖ 簡(jiǎn)易UDP網(wǎng)絡(luò)程序』

    ??個(gè)人主頁(yè): 北 海 ??所屬專(zhuān)欄: Linux學(xué)習(xí)之旅、神奇的網(wǎng)絡(luò)世界 ??操作環(huán)境: CentOS 7.6 阿里云遠(yuǎn)程服務(wù)器 在當(dāng)今數(shù)字化時(shí)代,網(wǎng)絡(luò)通信作為連接世界的橋梁,成為計(jì)算機(jī)科學(xué)領(lǐng)域中至關(guān)重要的一部分。理解網(wǎng)絡(luò)編程是每一位程序員必備的技能之一,而掌握套接字編程則

    2024年02月04日
    瀏覽(103)
  • 【網(wǎng)絡(luò)通信】socket編程——TCP套接字

    【網(wǎng)絡(luò)通信】socket編程——TCP套接字

    TCP依舊使用代碼來(lái)熟悉對(duì)應(yīng)的套接字,很多接口都是在udp中使用過(guò)的 所以就不會(huì)單獨(dú)把他們拿出來(lái)作為標(biāo)題了,只會(huì)把第一次出現(xiàn)的接口作為標(biāo)題 通過(guò)TCP的套接字 ,來(lái)把數(shù)據(jù)交付給對(duì)方的應(yīng)用層,完成雙方進(jìn)程的通信 在 tcpServer.hpp 中,創(chuàng)建一個(gè)命名空間 yzq 用于封裝 在命名

    2024年02月13日
    瀏覽(102)
  • Linux網(wǎng)絡(luò)編程- 原始套接字(Raw Socket)

    原始套接字(Raw Socket)提供了一種機(jī)制,允許應(yīng)用程序直接訪問(wèn)底層傳輸協(xié)議,繞過(guò)操作系統(tǒng)提供的傳輸層接口。這種套接字通常用于實(shí)現(xiàn)新的協(xié)議或?qū)ΜF(xiàn)有協(xié)議進(jìn)行低級(jí)別的操作。 以下是對(duì)原始套接字的詳細(xì)介紹: 定義與用途 : 原始套接字是直接基于網(wǎng)絡(luò)層(如IP)的。

    2024年02月07日
    瀏覽(97)
  • 【JavaEE初階】 網(wǎng)絡(luò)編程基礎(chǔ)與Socket套接字

    【JavaEE初階】 網(wǎng)絡(luò)編程基礎(chǔ)與Socket套接字

    用戶(hù)在瀏覽器中,打開(kāi)在線視頻網(wǎng)站,如騰訊看視頻,實(shí)質(zhì)是通過(guò)網(wǎng)絡(luò),獲取到網(wǎng)絡(luò)上的一個(gè)視頻資源。 與本地打開(kāi)視頻文件類(lèi)似,只是視頻文件這個(gè)資源的來(lái)源是 網(wǎng)絡(luò) 。 相比本地資源來(lái)說(shuō),網(wǎng)絡(luò)提供了更為豐富的網(wǎng)絡(luò)資源: 所謂的網(wǎng)絡(luò)資源,其實(shí)就是在網(wǎng)絡(luò)中可以獲取

    2024年02月05日
    瀏覽(97)
  • 網(wǎng)絡(luò)編程之 Socket 套接字(使用數(shù)據(jù)報(bào)套接字和流套接字分別實(shí)現(xiàn)一個(gè)小程序(附源碼))

    網(wǎng)絡(luò)編程之 Socket 套接字(使用數(shù)據(jù)報(bào)套接字和流套接字分別實(shí)現(xiàn)一個(gè)小程序(附源碼))

    網(wǎng)絡(luò)編程是指網(wǎng)絡(luò)上的主機(jī),通過(guò)不同的進(jìn)程,以編程的方式實(shí)現(xiàn) 網(wǎng)絡(luò)通信(或稱(chēng)為網(wǎng)絡(luò)數(shù)據(jù)傳輸) 只要滿(mǎn)足不同的進(jìn)程就可以進(jìn)行通信,所以即便是在同一個(gè)主機(jī),只要不同的進(jìn)程,基于網(wǎng)絡(luò)傳輸數(shù)據(jù),也屬于網(wǎng)絡(luò)編程 在一次網(wǎng)絡(luò)傳輸中: 發(fā)送端: 數(shù)據(jù)的 發(fā)送方進(jìn)程

    2024年02月03日
    瀏覽(84)
  • 【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程概念,socket套接字,基于UDP和TCP的網(wǎng)絡(luò)編程

    【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程概念,socket套接字,基于UDP和TCP的網(wǎng)絡(luò)編程

    前言: 大家好,我是 良辰丫 ,今天我們一起來(lái)學(xué)習(xí)網(wǎng)絡(luò)編程,網(wǎng)絡(luò)編程的基本概念,認(rèn)識(shí)套接字,UDP與TCP編程.?????? ??個(gè)人主頁(yè):良辰針不戳 ??所屬專(zhuān)欄:javaEE初階 ??勵(lì)志語(yǔ)句:生活也許會(huì)讓我們遍體鱗傷,但最終這些傷口會(huì)成為我們一輩子的財(cái)富。 ??期待大家三連,關(guān)注

    2023年04月20日
    瀏覽(85)
  • 網(wǎng)絡(luò)編程day1——進(jìn)程間通信-socket套接字

    ????????基本特征:socket是一種接口技術(shù),被抽象了一種文件操作,可以讓同一計(jì)算機(jī)中的不同進(jìn)程之間通信,也可以讓不同計(jì)算機(jī)中的進(jìn)程之間通信(網(wǎng)絡(luò)通信) ? ? ? ? 進(jìn)程A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????????? 進(jìn)程B ? ? 創(chuàng)建socket對(duì)象

    2024年02月10日
    瀏覽(106)
  • 【Linux網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字 -- 基于socket實(shí)現(xiàn)一個(gè)簡(jiǎn)單UDP網(wǎng)絡(luò)程序

    【Linux網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字 -- 基于socket實(shí)現(xiàn)一個(gè)簡(jiǎn)單UDP網(wǎng)絡(luò)程序

    我們把數(shù)據(jù)從A主機(jī)發(fā)送到B主機(jī),是目的嗎?不是,真正通信的不是這兩個(gè)機(jī)器!其實(shí)是這兩臺(tái)機(jī)器上面的軟件(人) 數(shù)據(jù)有 IP(公網(wǎng)) 標(biāo)識(shí)一臺(tái)唯一的主機(jī) ,用誰(shuí)來(lái)標(biāo)識(shí)各自主機(jī)上客戶(hù)或者服務(wù)進(jìn)程的唯一性呢? 為了更好的表示一臺(tái)主機(jī)上服務(wù)進(jìn)程的唯一性,我們采用 端口號(hào)

    2024年02月12日
    瀏覽(848)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包