问题描述
- 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。请大神给出合理的解释。
解决方案
参考
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。
时间: 2024-08-02 19:05:11