資料介紹
10.2.1 socket概述
1.socket定義
在Linux中的網(wǎng)絡(luò)編程是通過(guò)socket接口來(lái)進(jìn)行的。人們常說(shuō)的socket是一種特殊的I/O接口,它也是一種文件描述符。socket是一種常用的進(jìn)程之間通信機(jī)制,通過(guò)它不僅能實(shí)現(xiàn)本地機(jī)器上的進(jìn)程之間的通信,而且通過(guò)網(wǎng)絡(luò)能夠在不同機(jī)器上的進(jìn)程之間進(jìn)行通信。
每一個(gè)socket都用一個(gè)半相關(guān)描述{協(xié)議、本地地址、本地端口}來(lái)表示;一個(gè)完整的套接字則用一個(gè)相關(guān)描述{協(xié)議、本地地址、本地端口、遠(yuǎn)程地址、遠(yuǎn)程端口}來(lái)表示。socket也有一個(gè)類似于打開文件的函數(shù)調(diào)用,該函數(shù)返回一個(gè)整型的socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^(guò)socket來(lái)實(shí)現(xiàn)的。
2.socket類型
常見的socket有3種類型如下。
(1)流式socket(SOCK_STREAM)。
流式套接字提供可靠的、面向連接的通信流;它使用TCP協(xié)議,從而保證了數(shù)據(jù)傳輸?shù)恼_性和順序性。
(2)數(shù)據(jù)報(bào)socket(SOCK_DGRAM)。
數(shù)據(jù)報(bào)套接字定義了一種無(wú)連接的服務(wù),數(shù)據(jù)通過(guò)相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無(wú)序的,并且不保證是可靠、無(wú)差錯(cuò)的。它使用數(shù)據(jù)報(bào)協(xié)議UDP。
?。?)原始socket。
原始套接字允許對(duì)底層協(xié)議如IP或ICMP進(jìn)行直接訪問,它功能強(qiáng)大但使用較為不便,主要用于一些協(xié)議的開發(fā)。
10.2.2 地址及順序處理
1.地址結(jié)構(gòu)相關(guān)處理
?。?)數(shù)據(jù)結(jié)構(gòu)介紹。
下面首先介紹兩個(gè)重要的數(shù)據(jù)類型:sockaddr和sockaddr_in,這兩個(gè)結(jié)構(gòu)類型都是用來(lái)保存socket信息的,如下所示:
struct sockaddr
{
unsigned short sa_family; /*地址族*/
char sa_data[14]; /*14字節(jié)的協(xié)議地址,包含該socket的IP地址和端口號(hào)。*/
};
struct sockaddr_in
{
short int sa_family; /*地址族*/
unsigned short int sin_port; /*端口號(hào)*/
struct in_addr sin_addr; /*IP地址*/
unsigned char sin_zero[8]; /*填充0 以保持與struct sockaddr同樣大小*/
};
這兩個(gè)數(shù)據(jù)類型是等效的,可以相互轉(zhuǎn)化,通常sockaddr_in數(shù)據(jù)類型使用更為方便。在建立socketadd或sockaddr_in后,就可以對(duì)該socket進(jìn)行適當(dāng)?shù)牟僮髁恕?br /> ?。?)結(jié)構(gòu)字段。
表10.1列出了該結(jié)構(gòu)sa_family字段可選的常見值。
表10.1
結(jié)構(gòu)定義頭文件#include 《netinet/in.h》
sa_familyAF_INET:IPv4協(xié)議
AF_INET6:IPv6協(xié)議
AF_LOCAL:UNIX域協(xié)議
AF_LINK:鏈路地址協(xié)議
AF_KEY:密鑰套接字(socket)
sockaddr_in其他字段的含義非常清楚,具體的設(shè)置涉及其他函數(shù),在后面會(huì)有詳細(xì)的講解。
2.?dāng)?shù)據(jù)存儲(chǔ)優(yōu)先順序
?。?)函數(shù)說(shuō)明。
計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先(稱為大端模式)和低位字節(jié)優(yōu)先(稱為小端模式,PC機(jī)通常采用小端模式)。Internet上數(shù)據(jù)以高位字節(jié)優(yōu)先順序在網(wǎng)絡(luò)上傳輸,因此在有些情況下,需要對(duì)這兩個(gè)字節(jié)存儲(chǔ)優(yōu)先順序進(jìn)行相互轉(zhuǎn)化。這里用到了4個(gè)函數(shù):htons()、ntohs()、htonl()和ntohl()。這4個(gè)地址分別實(shí)現(xiàn)網(wǎng)絡(luò)字節(jié)序和主機(jī)字節(jié)序的轉(zhuǎn)化,這里的h代表host,n代表network,s代表short,l代表long。通常16位的IP端口號(hào)用s代表,而IP地址用l來(lái)代表。
?。?)函數(shù)格式說(shuō)明。
表10.2列出了這4個(gè)函數(shù)的語(yǔ)法格式。
表10.2 htons等函數(shù)語(yǔ)法要點(diǎn)
所需頭文件#include 《netinet/in.h》
函數(shù)原型uint16_t htons(unit16_t host16bit)
uint32_t htonl(unit32_t host32bit)
uint16_t ntohs(unit16_t net16bit)
uint32_t ntohs(unit32_t net32bit)
函數(shù)傳入值host16bit:主機(jī)字節(jié)序的16位數(shù)據(jù)
host32bit:主機(jī)字節(jié)序的32位數(shù)據(jù)
net16bit:網(wǎng)絡(luò)字節(jié)序的16位數(shù)據(jù)
net32bit:網(wǎng)絡(luò)字節(jié)序的32位數(shù)據(jù)
函數(shù)返回值成功:返回要轉(zhuǎn)換的字節(jié)序
出錯(cuò):-1
注意調(diào)用該函數(shù)只是使其得到相應(yīng)的字節(jié)序,用戶不需清楚該系統(tǒng)的主機(jī)字節(jié)序和網(wǎng)絡(luò)字節(jié)序是否真正相等。如果是相同不需要轉(zhuǎn)換的話,該系統(tǒng)的這些函數(shù)會(huì)定義成空宏。
1.socket定義
在Linux中的網(wǎng)絡(luò)編程是通過(guò)socket接口來(lái)進(jìn)行的。人們常說(shuō)的socket是一種特殊的I/O接口,它也是一種文件描述符。socket是一種常用的進(jìn)程之間通信機(jī)制,通過(guò)它不僅能實(shí)現(xiàn)本地機(jī)器上的進(jìn)程之間的通信,而且通過(guò)網(wǎng)絡(luò)能夠在不同機(jī)器上的進(jìn)程之間進(jìn)行通信。
每一個(gè)socket都用一個(gè)半相關(guān)描述{協(xié)議、本地地址、本地端口}來(lái)表示;一個(gè)完整的套接字則用一個(gè)相關(guān)描述{協(xié)議、本地地址、本地端口、遠(yuǎn)程地址、遠(yuǎn)程端口}來(lái)表示。socket也有一個(gè)類似于打開文件的函數(shù)調(diào)用,該函數(shù)返回一個(gè)整型的socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^(guò)socket來(lái)實(shí)現(xiàn)的。
2.socket類型
常見的socket有3種類型如下。
(1)流式socket(SOCK_STREAM)。
流式套接字提供可靠的、面向連接的通信流;它使用TCP協(xié)議,從而保證了數(shù)據(jù)傳輸?shù)恼_性和順序性。
(2)數(shù)據(jù)報(bào)socket(SOCK_DGRAM)。
數(shù)據(jù)報(bào)套接字定義了一種無(wú)連接的服務(wù),數(shù)據(jù)通過(guò)相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無(wú)序的,并且不保證是可靠、無(wú)差錯(cuò)的。它使用數(shù)據(jù)報(bào)協(xié)議UDP。
?。?)原始socket。
原始套接字允許對(duì)底層協(xié)議如IP或ICMP進(jìn)行直接訪問,它功能強(qiáng)大但使用較為不便,主要用于一些協(xié)議的開發(fā)。
10.2.2 地址及順序處理
1.地址結(jié)構(gòu)相關(guān)處理
?。?)數(shù)據(jù)結(jié)構(gòu)介紹。
下面首先介紹兩個(gè)重要的數(shù)據(jù)類型:sockaddr和sockaddr_in,這兩個(gè)結(jié)構(gòu)類型都是用來(lái)保存socket信息的,如下所示:
struct sockaddr
{
unsigned short sa_family; /*地址族*/
char sa_data[14]; /*14字節(jié)的協(xié)議地址,包含該socket的IP地址和端口號(hào)。*/
};
struct sockaddr_in
{
short int sa_family; /*地址族*/
unsigned short int sin_port; /*端口號(hào)*/
struct in_addr sin_addr; /*IP地址*/
unsigned char sin_zero[8]; /*填充0 以保持與struct sockaddr同樣大小*/
};
這兩個(gè)數(shù)據(jù)類型是等效的,可以相互轉(zhuǎn)化,通常sockaddr_in數(shù)據(jù)類型使用更為方便。在建立socketadd或sockaddr_in后,就可以對(duì)該socket進(jìn)行適當(dāng)?shù)牟僮髁恕?br /> ?。?)結(jié)構(gòu)字段。
表10.1列出了該結(jié)構(gòu)sa_family字段可選的常見值。
表10.1
結(jié)構(gòu)定義頭文件#include 《netinet/in.h》
sa_familyAF_INET:IPv4協(xié)議
AF_INET6:IPv6協(xié)議
AF_LOCAL:UNIX域協(xié)議
AF_LINK:鏈路地址協(xié)議
AF_KEY:密鑰套接字(socket)
sockaddr_in其他字段的含義非常清楚,具體的設(shè)置涉及其他函數(shù),在后面會(huì)有詳細(xì)的講解。
2.?dāng)?shù)據(jù)存儲(chǔ)優(yōu)先順序
?。?)函數(shù)說(shuō)明。
計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先(稱為大端模式)和低位字節(jié)優(yōu)先(稱為小端模式,PC機(jī)通常采用小端模式)。Internet上數(shù)據(jù)以高位字節(jié)優(yōu)先順序在網(wǎng)絡(luò)上傳輸,因此在有些情況下,需要對(duì)這兩個(gè)字節(jié)存儲(chǔ)優(yōu)先順序進(jìn)行相互轉(zhuǎn)化。這里用到了4個(gè)函數(shù):htons()、ntohs()、htonl()和ntohl()。這4個(gè)地址分別實(shí)現(xiàn)網(wǎng)絡(luò)字節(jié)序和主機(jī)字節(jié)序的轉(zhuǎn)化,這里的h代表host,n代表network,s代表short,l代表long。通常16位的IP端口號(hào)用s代表,而IP地址用l來(lái)代表。
?。?)函數(shù)格式說(shuō)明。
表10.2列出了這4個(gè)函數(shù)的語(yǔ)法格式。
表10.2 htons等函數(shù)語(yǔ)法要點(diǎn)
所需頭文件#include 《netinet/in.h》
函數(shù)原型uint16_t htons(unit16_t host16bit)
uint32_t htonl(unit32_t host32bit)
uint16_t ntohs(unit16_t net16bit)
uint32_t ntohs(unit32_t net32bit)
函數(shù)傳入值host16bit:主機(jī)字節(jié)序的16位數(shù)據(jù)
host32bit:主機(jī)字節(jié)序的32位數(shù)據(jù)
net16bit:網(wǎng)絡(luò)字節(jié)序的16位數(shù)據(jù)
net32bit:網(wǎng)絡(luò)字節(jié)序的32位數(shù)據(jù)
函數(shù)返回值成功:返回要轉(zhuǎn)換的字節(jié)序
出錯(cuò):-1
注意調(diào)用該函數(shù)只是使其得到相應(yīng)的字節(jié)序,用戶不需清楚該系統(tǒng)的主機(jī)字節(jié)序和網(wǎng)絡(luò)字節(jié)序是否真正相等。如果是相同不需要轉(zhuǎn)換的話,該系統(tǒng)的這些函數(shù)會(huì)定義成空宏。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- C++ Socket網(wǎng)絡(luò)編程大全源代碼下載 25次下載
- Windows-Socket-網(wǎng)絡(luò)編程詳解 0次下載
- Windows Socket網(wǎng)絡(luò)編程(二) —套接字編程原理 0次下載
- Socket網(wǎng)絡(luò)編程 0次下載
- TCP-IP_Socket網(wǎng)絡(luò)編程 0次下載
- Linux下基于Socket的網(wǎng)絡(luò)編程 0次下載
- Linux-socket網(wǎng)絡(luò)編程 0次下載
- Linux下Socket網(wǎng)絡(luò)編程 0次下載
- linux-socket網(wǎng)絡(luò)編程詳解 0次下載
- 基于windows socket網(wǎng)絡(luò)編程的UDP通信 1次下載
- 基于windows socket網(wǎng)絡(luò)編程的Tcp通信 3次下載
- 基于Socket網(wǎng)絡(luò)編程的遠(yuǎn)程物流防偽系統(tǒng)的設(shè)計(jì) 28次下載
- 基于Linux的Socket網(wǎng)絡(luò)編程的性能優(yōu)化
- 基于UDP協(xié)議的Socket網(wǎng)絡(luò)編程模式的實(shí)現(xiàn)
- 基于Socket的網(wǎng)絡(luò)編程
- 神經(jīng)網(wǎng)絡(luò)的基本原理及Python編程實(shí)現(xiàn) 180次閱讀
- IO與NIO有何區(qū)別 687次閱讀
- 工業(yè)樹莓派的Socket通信之旅:探索智能工業(yè)應(yīng)用的無(wú)限可能 751次閱讀
- UDP和TCP的區(qū)別 889次閱讀
- Python-網(wǎng)絡(luò)編程 471次閱讀
- Socket緩存究竟如何影響TCP的性能 1580次閱讀
- 基于TCP/IP網(wǎng)絡(luò)協(xié)議和SOCKET接口實(shí)現(xiàn)組態(tài)軟件通訊模塊的設(shè)計(jì) 3738次閱讀
- TCP和UDP的通信詳細(xì)資料總結(jié) 3037次閱讀
- 網(wǎng)絡(luò)編程你有沒有理解的透徹 1383次閱讀
- 如何才能成為IT的編程高手 5221次閱讀
- 如何實(shí)現(xiàn)ABB機(jī)器人和視覺系統(tǒng)間的TCP/IP通訊呢? 2.1w次閱讀
- 用Python制作編程語(yǔ)言的關(guān)系網(wǎng)絡(luò)圖 5153次閱讀
- 一切皆Socket!Socket是什么? 5215次閱讀
- 網(wǎng)絡(luò)數(shù)據(jù)傳輸socket和http優(yōu)缺點(diǎn) 2.8w次閱讀
- udp和tcp的區(qū)別在哪里 8485次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多