Linux中網路程式設計常用函式
阿新 • • 發佈:2019-01-09
1.位元組序轉換
CPU 向記憶體儲存資料以及解析資料的方式有兩種:
1)大端位元組序(Big Endian): 高位位元組存放在低位地址上
2) 小端位元組序(Little Endian): 高位位元組存放在高位地址上
因為這種差異性,異導致資料解析的混亂,因此在通過網路傳輸資料時,先將資料陣列轉換成大端格式再進行網路傳輸(網路序)。
相應的轉化函式如下:
unsigned short htons(unsigned short); //把short型資料從主機位元組序轉換成網路位元組序 unsigned short ntohs(unsigned short); //把short型資料從網路位元組序轉換成主機位元組序 unsigned long htonl(unsigned long); unsigned long ntohl(unsigned long);
這裡s指short(2個位元組),以s結尾的函式通常作為埠的轉換;l 指long(4個位元組), 以l結尾的函式通常作為IP地址的轉換。
2.網路地址的初始化和分配
1)將字串資訊轉換成網路位元組序整數型
2)將網路位元組序整型IP地址轉換成字串型#include<arpa/inet.h> in_addr_t inet_addr(const char *string); //成功時返回32位大端整型值,失敗時返回INADDR_NONE int inet_aton(char *string,struct in_addr *addr); //成功時返回1,失敗時返回0 string: 含有需轉換的IP地址資訊的字串地址值 addr:將儲存轉換結果的in_addr結構體變數的地址值
#include<arpa/inet.h>
char *inet_ntoa(struct in_addr adr); //成功時返回轉換後的字串地址值,失敗後返回0
3.IP地址與域名之間的轉換
#include<netdb.h> struct hostent *gethostbyname(const char *hostname); //成功時返回hostent結構體的地址,失敗時返回NULL struct hostent *gethostbyaddr(const char *addr,socklen_t len,int family); //成功時返回hostent結構體變數值,失敗時返回NULL addr:含有IP地址資訊的in_addr 結構體指標 len:向第一個引數傳遞的地址資訊位元組數 family:傳遞地址簇資訊,IPV4時為AF_INET
hostent結構體如下:
struct hostent{
char *h_name; //offical name(官方域名,代表某一主頁)
char **h_aliases; //alias list (同一IP繫結多個域名)
int h_addrtype; //host address type
int h_length; //address length
char **h_addr_list ; //address list (多個IP對應同一域名,實現多個伺服器直接的負載均衡)
}