1. 程式人生 > >網路程式設計中如何設定伺服器監聽IP

網路程式設計中如何設定伺服器監聽IP

       在使用socket編寫伺服器程式時,設定伺服器繫結的sockaddr_in結構往往會困擾很多同學,sockaddr_in結構中sin_famliy和sin_port(注意要使用htons轉換為網路序)就不說了,相信大家已知道。sin_addr是要設定的監聽地址。sin_addr型別為: 

struct in_addr {

               in_addr_t s_addr;

           };

這裡有幾個常用的值:

(1)sin_addr.s_addr = INADDR_ANY;(0x00000000)

(2)sin_addr.s_addr = INADDR_NONE;( 0xffffffff)inet_addr("255.255.255.255")

(3)sin_addr.s_addr = INADDR_LOOPBACK;(0x7f000001)inet_addr("127.0.0.1")

(4)sin_addr.s_addr = inet_addr("192.168.1.211");(192.168.1.211是本地eth0的ip地址)

(5)sin_addr.s_addr = inet_addr("192.168.1.210");(192.168.1.211是本地eth1的ip地址)

第一個值將監聽IP設定為0,表示客戶端發往本地任意ip上該埠的資料包都可以被伺服器接收到。

第二個值將監聽IP設定為廣播地址,實驗發現可以設定成功,但不知道有啥用?請各位大神指教。

第三個值將監聽IP設定為本地環回地址,表明該服務僅用於本地socket通訊,並且通訊資料包不經過網絡卡,即使不連線網線也可以向127.0.0.1的監聽埠傳送資料包。

第四、五個值表示將監聽IP設定為本地網絡卡上的IP。

ps:localhost、127.0.0.1和192.168.1.211的區別:localhost是本地主機名,/etc/hosts檔案可以設定IP和localhost的對應關係;127.0.0.1是本地環回地址,和本地環回地址通訊不經過物理網絡卡,因次即使不連線網路,127.0.0.1的資料包也可以傳送和接收;192.168.1.211是本地網絡卡IP地址,網絡卡需上電才可以進行通訊。