客戶端需要知道服務器的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來處理。