A、B两个客户端IP相同,client A与服务端S连接成功,能收发消息。这个时候,client B试图连接S(connect的IP跟端口都相同),服务端监听,B与S成功连接,Accept一个新的文件描述符,从该文件描述符中取得服务端的IP。client A则掉线,recv显示服务端关闭连接,接着A试图去连接S,连接失败,错误是超时,但是服务端能accept成功返回新的文件描述符,不过调用getsocketname,取得的IP = 0。请大神给出合理的解释。
1条回答 默认 最新
- save4me 2014-11-25 01:33关注
参考
getsockname always returning 0.0.0.0?
获取IP地址getsockname gethostname
你的服务器端socket绑定的是指定地址还是任意地址?如果是addr.sin_addr.s_addr = INADDR_ANY;gethostname 你只要初始化了winsock库就可以直接使用上述代码得到本机的IP了(在linux中不需要,直接用)。但是getsockname方式来获取对应的 IP地址的时候,首先需要通过socket函数创建的有效的套接字,另外还要bind。才能执行成功。如果在socket和bind之间调用就会调用失 败。虽然在bind之后可以执行成功,通常我们得到的结果是0.0.0.0,除非在bind的时候就指定特定的IP。
解决 无用评论 打赏 举报
悬赏问题
- ¥30 python代码,帮调试
- ¥15 #MATLAB仿真#车辆换道路径规划
- ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
- ¥15 数据可视化Python
- ¥15 要给毕业设计添加扫码登录的功能!!有偿
- ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
- ¥15 微信公众号自制会员卡没有收款渠道啊
- ¥100 Jenkins自动化部署—悬赏100元
- ¥15 关于#python#的问题:求帮写python代码
- ¥20 MATLAB画图图形出现上下震荡的线条