資料介紹
10.2.1 socket概述
1.socket定義
在Linux中的網(wǎng)絡(luò)編程是通過socket接口來進行的。人們常說的socket是一種特殊的I/O接口,它也是一種文件描述符。socket是一種常用的進程之間通信機制,通過它不僅能實現(xiàn)本地機器上的進程之間的通信,而且通過網(wǎng)絡(luò)能夠在不同機器上的進程之間進行通信。
每一個socket都用一個半相關(guān)描述{協(xié)議、本地地址、本地端口}來表示;一個完整的套接字則用一個相關(guān)描述{協(xié)議、本地地址、本地端口、遠程地址、遠程端口}來表示。socket也有一個類似于打開文件的函數(shù)調(diào)用,該函數(shù)返回一個整型的socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^socket來實現(xiàn)的。
2.socket類型
常見的socket有3種類型如下。
?。?)流式socket(SOCK_STREAM)。
流式套接字提供可靠的、面向連接的通信流;它使用TCP協(xié)議,從而保證了數(shù)據(jù)傳輸?shù)恼_性和順序性。
?。?)數(shù)據(jù)報socket(SOCK_DGRAM)。
數(shù)據(jù)報套接字定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨立的報文進行傳輸,是無序的,并且不保證是可靠、無差錯的。它使用數(shù)據(jù)報協(xié)議UDP。
?。?)原始socket。
原始套接字允許對底層協(xié)議如IP或ICMP進行直接訪問,它功能強大但使用較為不便,主要用于一些協(xié)議的開發(fā)。
10.2.2 地址及順序處理
1.地址結(jié)構(gòu)相關(guān)處理
?。?)數(shù)據(jù)結(jié)構(gòu)介紹。
下面首先介紹兩個重要的數(shù)據(jù)類型:sockaddr和sockaddr_in,這兩個結(jié)構(gòu)類型都是用來保存socket信息的,如下所示:
struct sockaddr
{
unsigned short sa_family; /*地址族*/
char sa_data[14]; /*14字節(jié)的協(xié)議地址,包含該socket的IP地址和端口號。*/
};
struct sockaddr_in
{
short int sa_family; /*地址族*/
unsigned short int sin_port; /*端口號*/
struct in_addr sin_addr; /*IP地址*/
unsigned char sin_zero[8]; /*填充0 以保持與struct sockaddr同樣大小*/
};
這兩個數(shù)據(jù)類型是等效的,可以相互轉(zhuǎn)化,通常sockaddr_in數(shù)據(jù)類型使用更為方便。在建立socketadd或sockaddr_in后,就可以對該socket進行適當?shù)牟僮髁恕?br /> (2)結(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ù),在后面會有詳細的講解。
2.數(shù)據(jù)存儲優(yōu)先順序
?。?)函數(shù)說明。
計算機數(shù)據(jù)存儲有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先(稱為大端模式)和低位字節(jié)優(yōu)先(稱為小端模式,PC機通常采用小端模式)。Internet上數(shù)據(jù)以高位字節(jié)優(yōu)先順序在網(wǎng)絡(luò)上傳輸,因此在有些情況下,需要對這兩個字節(jié)存儲優(yōu)先順序進行相互轉(zhuǎn)化。這里用到了4個函數(shù):htons()、ntohs()、htonl()和ntohl()。這4個地址分別實現(xiàn)網(wǎng)絡(luò)字節(jié)序和主機字節(jié)序的轉(zhuǎn)化,這里的h代表host,n代表network,s代表short,l代表long。通常16位的IP端口號用s代表,而IP地址用l來代表。
?。?)函數(shù)格式說明。
表10.2列出了這4個函數(shù)的語法格式。
表10.2 htons等函數(shù)語法要點
所需頭文件#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:主機字節(jié)序的16位數(shù)據(jù)
host32bit:主機字節(jié)序的32位數(shù)據(jù)
net16bit:網(wǎng)絡(luò)字節(jié)序的16位數(shù)據(jù)
net32bit:網(wǎng)絡(luò)字節(jié)序的32位數(shù)據(jù)
函數(shù)返回值成功:返回要轉(zhuǎn)換的字節(jié)序
出錯:-1
注意調(diào)用該函數(shù)只是使其得到相應(yīng)的字節(jié)序,用戶不需清楚該系統(tǒng)的主機字節(jié)序和網(wǎng)絡(luò)字節(jié)序是否真正相等。如果是相同不需要轉(zhuǎn)換的話,該系統(tǒng)的這些函數(shù)會定義成空宏。
1.socket定義
在Linux中的網(wǎng)絡(luò)編程是通過socket接口來進行的。人們常說的socket是一種特殊的I/O接口,它也是一種文件描述符。socket是一種常用的進程之間通信機制,通過它不僅能實現(xiàn)本地機器上的進程之間的通信,而且通過網(wǎng)絡(luò)能夠在不同機器上的進程之間進行通信。
每一個socket都用一個半相關(guān)描述{協(xié)議、本地地址、本地端口}來表示;一個完整的套接字則用一個相關(guān)描述{協(xié)議、本地地址、本地端口、遠程地址、遠程端口}來表示。socket也有一個類似于打開文件的函數(shù)調(diào)用,該函數(shù)返回一個整型的socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^socket來實現(xiàn)的。
2.socket類型
常見的socket有3種類型如下。
?。?)流式socket(SOCK_STREAM)。
流式套接字提供可靠的、面向連接的通信流;它使用TCP協(xié)議,從而保證了數(shù)據(jù)傳輸?shù)恼_性和順序性。
?。?)數(shù)據(jù)報socket(SOCK_DGRAM)。
數(shù)據(jù)報套接字定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨立的報文進行傳輸,是無序的,并且不保證是可靠、無差錯的。它使用數(shù)據(jù)報協(xié)議UDP。
?。?)原始socket。
原始套接字允許對底層協(xié)議如IP或ICMP進行直接訪問,它功能強大但使用較為不便,主要用于一些協(xié)議的開發(fā)。
10.2.2 地址及順序處理
1.地址結(jié)構(gòu)相關(guān)處理
?。?)數(shù)據(jù)結(jié)構(gòu)介紹。
下面首先介紹兩個重要的數(shù)據(jù)類型:sockaddr和sockaddr_in,這兩個結(jié)構(gòu)類型都是用來保存socket信息的,如下所示:
struct sockaddr
{
unsigned short sa_family; /*地址族*/
char sa_data[14]; /*14字節(jié)的協(xié)議地址,包含該socket的IP地址和端口號。*/
};
struct sockaddr_in
{
short int sa_family; /*地址族*/
unsigned short int sin_port; /*端口號*/
struct in_addr sin_addr; /*IP地址*/
unsigned char sin_zero[8]; /*填充0 以保持與struct sockaddr同樣大小*/
};
這兩個數(shù)據(jù)類型是等效的,可以相互轉(zhuǎn)化,通常sockaddr_in數(shù)據(jù)類型使用更為方便。在建立socketadd或sockaddr_in后,就可以對該socket進行適當?shù)牟僮髁恕?br /> (2)結(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ù),在后面會有詳細的講解。
2.數(shù)據(jù)存儲優(yōu)先順序
?。?)函數(shù)說明。
計算機數(shù)據(jù)存儲有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先(稱為大端模式)和低位字節(jié)優(yōu)先(稱為小端模式,PC機通常采用小端模式)。Internet上數(shù)據(jù)以高位字節(jié)優(yōu)先順序在網(wǎng)絡(luò)上傳輸,因此在有些情況下,需要對這兩個字節(jié)存儲優(yōu)先順序進行相互轉(zhuǎn)化。這里用到了4個函數(shù):htons()、ntohs()、htonl()和ntohl()。這4個地址分別實現(xiàn)網(wǎng)絡(luò)字節(jié)序和主機字節(jié)序的轉(zhuǎn)化,這里的h代表host,n代表network,s代表short,l代表long。通常16位的IP端口號用s代表,而IP地址用l來代表。
?。?)函數(shù)格式說明。
表10.2列出了這4個函數(shù)的語法格式。
表10.2 htons等函數(shù)語法要點
所需頭文件#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:主機字節(jié)序的16位數(shù)據(jù)
host32bit:主機字節(jié)序的32位數(shù)據(jù)
net16bit:網(wǎng)絡(luò)字節(jié)序的16位數(shù)據(jù)
net32bit:網(wǎng)絡(luò)字節(jié)序的32位數(shù)據(jù)
函數(shù)返回值成功:返回要轉(zhuǎn)換的字節(jié)序
出錯:-1

下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- C++ Socket網(wǎng)絡(luò)編程大全源代碼下載 27次下載
- 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ò)編程的遠程物流防偽系統(tǒng)的設(shè)計 28次下載
- 基于Linux的Socket網(wǎng)絡(luò)編程的性能優(yōu)化
- 基于UDP協(xié)議的Socket網(wǎng)絡(luò)編程模式的實現(xiàn)
- 基于Socket的網(wǎng)絡(luò)編程
- 【AI技術(shù)支持】ESP8684-WROOM-01C模組socket綁定失敗問題處理 240次閱讀
- socket 客戶端與服務(wù)器的實現(xiàn) 373次閱讀
- socket 發(fā)送和接收數(shù)據(jù)方法 601次閱讀
- socket 網(wǎng)絡(luò)通信協(xié)議解析 815次閱讀
- socket 編程基礎(chǔ)入門 393次閱讀
- C語言中的socket編程基礎(chǔ) 396次閱讀
- 如何在Python中使用socket 259次閱讀
- KUKA機器人socket通訊配置方法 807次閱讀
- IO與NIO有何區(qū)別 904次閱讀
- 工業(yè)樹莓派的Socket通信之旅:探索智能工業(yè)應(yīng)用的無限可能 878次閱讀
- TCP和UDP的通信詳細資料總結(jié) 3143次閱讀
- 網(wǎng)絡(luò)編程你有沒有理解的透徹 1481次閱讀
- 一切皆Socket!Socket是什么? 5329次閱讀
- 網(wǎng)絡(luò)數(shù)據(jù)傳輸socket和http優(yōu)缺點 2.9w次閱讀
- udp和tcp的區(qū)別在哪里 8593次閱讀
下載排行
本周
- 1EMC電路設(shè)計工程師必備的EMC基礎(chǔ)
- 0.42 MB | 4次下載 | 2 積分
- 2AU3116 2×60W模擬輸入雙通道Class-D 音頻功率放大器數(shù)據(jù)手冊
- 1.19 MB | 1次下載 | 免費
- 3低壓降肖特基整流管SR340L數(shù)據(jù)手冊
- 0.78 MB | 1次下載 | 免費
- 4ZX8002E 觸摸調(diào)光LED集成IC數(shù)據(jù)手冊
- 2.27 MB | 次下載 | 免費
- 5SOD-323塑料封裝ESD保護二極管SD05T系列規(guī)格書
- 1.07 MB | 次下載 | 免費
- 6SOT-23塑料封裝ESD保護二極管SMxx Series系列規(guī)格書
- 0.93 MB | 次下載 | 免費
- 7高效率整流二極管HER151 THRU HER158數(shù)據(jù)手冊
- 0.54 MB | 次下載 | 免費
- 8低壓降肖特基整流管SL22 THRU SL210數(shù)據(jù)手冊
- 1.03 MB | 次下載 | 免費
本月
- 1三相逆變主電路的原理圖和PCB資料合集免費下載
- 27.35 MB | 111次下載 | 1 積分
- 2運算放大器基本電路中文資料
- 1.30 MB | 16次下載 | 免費
- 3蘋果iphone 11電路原理圖
- 4.98 MB | 11次下載 | 5 積分
- 4TL494工業(yè)用開關(guān)電源原理圖資料
- 0.22 MB | 10次下載 | 1 積分
- 5常用電子元器件介紹
- 3.21 MB | 8次下載 | 免費
- 6QW2893應(yīng)急燈專用檢測芯片
- 590.40 KB | 4次下載 | 免費
- 7相關(guān)協(xié)議信號總結(jié)
- 0.94 MB | 4次下載 | 免費
- 8EMC電路設(shè)計工程師必備的EMC基礎(chǔ)
- 0.42 MB | 4次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935130次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191390次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183344次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81591次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65989次下載 | 10 積分
評論