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同樣大小*/};2.4.1 網(wǎng)絡(luò)地址的轉(zhuǎn)換
IP地址通常用數(shù)字加點(如192.168.1.a)表示 , 而在struct in_addr中使用的式32位整數(shù)表示 。因此 , Linux提供如下函數(shù)進(jìn)行兩者之間的轉(zhuǎn)換:
inet_aton()函數(shù):所需要頭文件#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>函數(shù)格式:
int inet_aton(const char *cp, struct in_addr *inp);函數(shù)功能:將a.b.c.d字符串形式的IP地址轉(zhuǎn)換成32位網(wǎng)絡(luò)序號IP地址;*cp:存放字符串形式的IP地址的指針*inp:存放32位的網(wǎng)絡(luò)序號IP地址
返回值:轉(zhuǎn)換成功 , 返回非0 , 否則返回0;
inet_ntoa()函數(shù):客戶機端:所需要頭文件#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>函數(shù)格式:
char *inet_ntoa(struct in_addr in);函數(shù)功能:將32位網(wǎng)絡(luò)序號IP地址轉(zhuǎn)換成a.b.c.d字符串形式的IP地址;in:Internet主機地址的結(jié)構(gòu)
返回值:轉(zhuǎn)換成功 , 返回一個字符指針 , 否則返回NULL;
2.4 字節(jié)序
不同的CPU采用對變量的字節(jié)存儲順序可能不同 。
常用的X86結(jié)構(gòu)是小端模式 , 很多的ARM , DSP都為小端模式 , 即內(nèi)存的低地址存儲數(shù)據(jù)的低字節(jié) , 高地址存儲數(shù)據(jù)的高字節(jié) 。
而KEIL C51則為大端模式 , 內(nèi)存的高地址存儲數(shù)據(jù)的低字節(jié) , 低地址存儲數(shù)據(jù)高字節(jié) 。
對于網(wǎng)絡(luò)傳輸來說 , 數(shù)據(jù)順序必須是一致的 , 網(wǎng)絡(luò)字節(jié)順序采用大端字節(jié)序方式 。
下面是四個常用的轉(zhuǎn)換函數(shù):
主機轉(zhuǎn)網(wǎng)絡(luò):
htons()函數(shù):
所需要頭文件:
#include <netinet/in.h>函數(shù)格式:
unsigned short int htons(unsigned short int hostshort)函數(shù)功能:將參數(shù)指定的16位主機(host)字符順序轉(zhuǎn)換成網(wǎng)絡(luò)(net)字符順序;hostshort:待轉(zhuǎn)換的16位主機字符順序數(shù)返回值:返回對應(yīng)的網(wǎng)絡(luò)字符順序數(shù);
htonl()函數(shù):所需要頭文件:#include <netinet/in.h>函數(shù)格式:
unsigned long int htons(unsigned long int hostlong)函數(shù)功能:將參數(shù)指定的32位主機(host)字符順序轉(zhuǎn)換成網(wǎng)絡(luò)(net)字符順序;hostlong:待轉(zhuǎn)換的32位主機字符順序數(shù)返回值:返回對應(yīng)的網(wǎng)絡(luò)字符順序數(shù);
網(wǎng)絡(luò)轉(zhuǎn)主機:
ntohs()函數(shù):所需要頭文件:#include <netinet/in.h>函數(shù)格式:
unsigned short int ntohs(unsigned short int netshort)函數(shù)功能:將參數(shù)指定的16位網(wǎng)絡(luò)(net)字符順序轉(zhuǎn)換成主機(host)字符順序;netshort:待轉(zhuǎn)換的16位網(wǎng)絡(luò)字符順序數(shù)
返回值:返回對應(yīng)的主機字符順序數(shù);
ntohl()函數(shù):所需要頭文件:#include <netinet/in.h>函數(shù)格式:
unsigned long int ntohl(unsigned long int netlong)函數(shù)功能:將參數(shù)指定的32位網(wǎng)絡(luò)(net)字符順序轉(zhuǎn)換成主機(host)字符順序;netshort:待轉(zhuǎn)換的32位網(wǎng)絡(luò)字符順序數(shù)返回值:返回對應(yīng)的主機字符順序數(shù);
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 硬盤io設(shè)備錯誤解決方法 linux硬盤查看命令
- linux查看CPU使用情況 linux查看cpu主頻命令
- 通信基礎(chǔ)知識入門 移動通信系統(tǒng)的組成
- linux查看已安裝的軟件版本 查看yum安裝的軟件包
- linux基礎(chǔ)入門知識 linux基礎(chǔ)培訓(xùn)文檔
- 線下劇本殺入門基礎(chǔ)知識小白必看 劇本殺怎么玩
- java入門基礎(chǔ)知識 java算法題面試
- 《蕙蘭瑜伽視頻教程》01 蕙蘭瑜伽基礎(chǔ)知識
- linux磁盤掛載詳細(xì)教程 磁盤掛載命令
- 查看linux版本的三種常用方法 查詢linux操作系統(tǒng)版本
