服务器端地址选择——“INADDR_ANY”

本文详细解析了宏INADDR_ANY在TCP通信中的应用,解释了其如何简化socket绑定过程,允许服务器监听所有IP地址上的连接,从而实现客户端通过本机任一IP地址与服务器通信。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值