2 mr d prince Mr_D_prince 于 2014.11.24 21:11 提问

getsocketname取得的IP = 0 1C

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
save4me   Ds   Rxr 2014.11.25 09: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。

Mr_D_prince
Mr_D_prince 创建socket时使用的IP是0,有具体的端口,并且绑定了。我们遇到的情况是,客户端成功connect时,调用getsocketname能获取到IP,但是当客户端connect失败时,调用getsocketname获得的IP=0
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!