我們使用socket進(jìn)行通信的時候,,我們需要指定三個元素:通信域(地址族)、IP地址,、端口號,,這三個元素由SOCKADDR_IN結(jié)構(gòu)體定義,為了簡化編程一般將IP地址設(shè)置為INADDR_ANY,,如果需要使用特定的IP地址則需要使用inet_addr 和inet_ntoa完成字符串和in_addr結(jié)構(gòu)體的互換,,in_addr是SOCKADDR_IN成員,其代表IP地址,。 inet_add函數(shù)聲明如下: - unsigned long inet_addr(const char* cp);
參數(shù): cp代表點(diǎn)分十進(jìn)制的IP地址,,如1.2.3.4
inet_ntoa 函數(shù)聲明如下: - char* inet_ntoa(struct in_addr in);
參數(shù): in代碼in_addr的結(jié)構(gòu)體,其結(jié)構(gòu)體如下: - 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;
- };
函數(shù)使用代碼如下: - SOCKADDR_IN sock;
- sock.sin_family = AF_INET;
- //將字符串轉(zhuǎn)換為in_addr類型
- sock.sin_addr.S_un.S_addr = inet_addr("192.168.1.111");
- sock.sin_port = htons(5000);
-
- //將in_addr類型轉(zhuǎn)換為字符串
- printf("inet_ntoa ip = %s\n",inet_ntoa(sock.sin_addr));
結(jié)果輸出: inet_ntoa ip = 192.168.1.111
|