服務器端地址選擇——“INADDR_ANY”

客戶端需要知道服務器的ip地址和端口port之後,才能和服務器端建立通信。

tcpclient.c

struct sockaddr_in servaddr;

servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(12345);
inet_pton(AF_INET,argv[1],&seraddr.sin_addr);

tcpserver.c

struct sockaddr_in servaddr;

servaddr.sin_family  = AF_INET;
servaddr.sin_port = htons(12345);
servaddr.sin_address.s_addr = htonl(INADDR_ANY);

在運行的時候命令:

./tcpclient 0.0.0.0

後面的ip地址我採用本機地址0.0.0.0,後來發現是可以通信的。然後查了下參數“INADDR_ANY”,宏INADDR_ANY轉換過來就是0.0.0.0,泛指本機的意思,也就是表示本機的所有IP,因爲有些機子不止一塊網卡,多網卡的情況下,這個就表示所有網卡ip地址的意思。

就比方說我這裏本機的ip地址包括:

192.168.197.129

127.0.0.1

0.0.0.0

所以我去連接這三個ip地址,都可以進行通信,這個參數就表明可以連接到本機的所有ip都是可以的,極大的簡化了需要創建socket的數量,因爲我們就綁定一個INADDR_ANY和一個端口,然後客戶端通信到這個機器的所有ip都用這個socket來處理。

發佈了275 篇原創文章 · 獲贊 37 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章