標籤:字元 www bsp char 失敗 baidu union 位元 net
1. struct hostent結構體
struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list; #define h_addr h_addr_list[0] };
h_name 地址的正式名稱。
h_aliases 預備名稱(別名)的指標。
h_addrtype 地址類型; 通常是AF_INET。
h_length 地址的位元長度。
h_addr_list 主機網路地址指標。網路位元組順序。
h_addr h_addr_list中的第一地址。
2. in_addr結構體
#include <arpa/inet.h>typedef struct in_addr { union { struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { USHORT s_w1,s_w2; } S_un_w; ULONG S_addr; } S_un; #define s_addr S_un.S_addr /* can be used for most tcp & ip code */ #define s_host S_un.S_un_b.s_b2 // host on imp #define s_net S_un.S_un_b.s_b1 // network #define s_imp S_un.S_un_w.s_w2 // imp #define s_impno S_un.S_un_b.s_b4 // imp # #define s_lh S_un.S_un_b.s_b3 // logical host } IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;
3. gethostbyname()函數
#include <netdb.h>#include <sys/socket.h>struct hostent *gethostbyname(const char *name);
此函數調用入參為主機名稱或者網域名稱,例如www.google.com,wpc等等。函數返回一個指向struct hostent結構類型的指標,如果調用失敗,就返回一個NULL。
返回的struct hostent結構體中的h_addr_list是一個指標數組,數組中的每個元素可以看作是指向in_addr型的指標。之所以定義為char**,是因為hostent結構支援
多種地址類型。
通過gethostbyname("www.baidu.com")得到hostent之後可以列印出如下內容:
host->h_addr_list[0][0] = 14host->h_addr_list[0][1] = 215host->h_addr_list[0][2] = 177host->h_addr_list[0][3] = 37
4. inet_ntoa ()函數
#include <arpa/inet.h>char *inet_ntoa (struct in_addr);
函數的功能是將網路位元組序的地址轉化為帶“.”格式的IP地址字串。
socket編程基礎1——hostent、in_addr、gethostbyname、inet_ntoa