日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

基本通信模型

發(fā)布時(shí)間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基本通信模型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

·概要:

??? 所謂的基本通信模型是指SOCKET通信。這里介紹的是初期學(xué)習(xí)使用的一些SOCKET相關(guān)概念和接口使用情況。

??? SOCKET編程也跟平臺(tái)有關(guān):linux等平臺(tái)使用的是標(biāo)準(zhǔn)SOCKET--又稱Berkeley Socket;windows平臺(tái)的Winsock。

?

·要點(diǎn):

--基礎(chǔ):

??? Socket實(shí)際上是網(wǎng)絡(luò)通信端點(diǎn)的一種抽象,它提供了一種發(fā)送和接收數(shù)據(jù)的機(jī)制。其中IP用于定位通信的計(jì)算機(jī),而端口則可以定位到通信的進(jìn)程。這跟電話很像:IP+Port相當(dāng)于電話號(hào)碼,只要知道電話號(hào)碼就可以給其他人打電話了。

??? 常用的TCP/UDP則是具體的通信方法(協(xié)議),這些是已經(jīng)成熟并被完整實(shí)現(xiàn)的技術(shù),所以使用的使用只要指定是采用TCP還是UDP方式就好。同時(shí)在這兩種協(xié)議上發(fā)展了很多應(yīng)用協(xié)議,TCP之上的FTP/SMTP/TTP/HTTP,UDP之上的TFTP和廣播技術(shù)。

??? 一個(gè)網(wǎng)絡(luò)連接需要的信息:本地主機(jī)地址+本地協(xié)議端口(怎么找到我)、遠(yuǎn)程主機(jī)地址+遠(yuǎn)程協(xié)議端口(怎么找到你)和協(xié)議(打電話還是發(fā)短信)。

?

--相關(guān)函數(shù)和數(shù)據(jù)結(jié)構(gòu)(以TCP為例):

數(shù)據(jù)結(jié)構(gòu):

??? socket作為整個(gè)通信的基礎(chǔ)在linux平臺(tái)定義為INT類型,而在windows平臺(tái)則定義為:SOCKET socket{int af(協(xié)議族),int type(類型),int protocol(協(xié)議地址)};同時(shí)在內(nèi)部定義了協(xié)議,可直接使用。

??? 通信中的IP和端口等信息被包含在一個(gè)表示地址的數(shù)據(jù)結(jié)構(gòu)中,windows平臺(tái)定義為struct sockaddr_in{sort sin_family;u_short sin_port,struct in_addr sin_addr;char sin_zero[8]};的數(shù)據(jù)結(jié)構(gòu)。

?

主函數(shù):

??? 向系統(tǒng)申請(qǐng)SOCKET資源的socket函數(shù)和相關(guān)的釋放socket資源函數(shù);

??? 作為客戶端的主動(dòng)連接函數(shù)connect函數(shù);

??? 服務(wù)器端配置函數(shù)bind(綁定IP和端口)和listen(設(shè)置緩存隊(duì)列長(zhǎng)度);

??? 服務(wù)器端主函數(shù)accept函數(shù)--用于接受客戶端連接請(qǐng)求;

??? 相關(guān)的讀寫函數(shù)send和recv兩個(gè)函數(shù)—linux還有write/read等。

IP地址轉(zhuǎn)換:

??? 整數(shù)地址與ASCII地址(如"192.168.16.182")之間的轉(zhuǎn)換函數(shù):

???????? int inet_aton(const char* straddr,struct in_addr* adrp);

???????? char* inet_ntoa(struct in_addr inaddr);

???????? in_addr_t inet_addr(const char* cp);

??? 域名和整數(shù)地址的轉(zhuǎn)換函數(shù):

???? struct hostent* gethostbyname(const char* name);

???? struct hostent* gethostbyaddr(const char* addr,int len,int family);

字節(jié)序列轉(zhuǎn)換:

??? 首先需要理解的是不同的存儲(chǔ)字節(jié)的格式:BigEndian(網(wǎng)絡(luò))和LittleEndian。

??? 相關(guān)轉(zhuǎn)換函數(shù):

??????? u_long htonl(u_long hostlong);

??????? u_short htons(u_short hostshort);

??????? u_long ntohl(u_long netlong);

??????? u_short ntohs(u_short netshort);

?

--常用通信模型:

??? 客戶端:

???? 初始化Socket--建立連接--收發(fā)數(shù)據(jù)--關(guān)閉連接;

??? 服務(wù)器端:

???? 初始化監(jiān)聽Socket(包含bind和listen)--接受新連接--收發(fā)數(shù)據(jù)--關(guān)閉連接;

??? 對(duì)于服務(wù)器端,在{接受新連接--收發(fā)數(shù)據(jù)}形成一個(gè)循環(huán)就可以作為簡(jiǎn)單的服務(wù)器模型了。同時(shí)也可以對(duì){接受新連接--收發(fā)數(shù)據(jù)}進(jìn)行擴(kuò)展就可擴(kuò)展出很多的通信模型來(lái)。

?

--UDP通信:

??? UDP相比于TCP使用的接口函數(shù)少,這跟UDP內(nèi)部的工作原理有關(guān)。

?

·小結(jié):

??? 很多的通信庫(kù)都會(huì)對(duì)相關(guān)的數(shù)據(jù)結(jié)構(gòu)概念和函數(shù)接口進(jìn)行封裝,來(lái)實(shí)現(xiàn)跨平臺(tái);

轉(zhuǎn)載于:https://www.cnblogs.com/davidyang2415/archive/2012/04/16/2451505.html

總結(jié)

以上是生活随笔為你收集整理的基本通信模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。