客户端需要知道服务器的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来处理。