1. 程式人生 > >Linux中網路程式設計常用函式

Linux中網路程式設計常用函式

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)將字串資訊轉換成網路位元組序整數型

#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結構體變數的地址值
2)將網路位元組序整型IP地址轉換成字串型
#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對應同一域名,實現多個伺服器直接的負載均衡)
}