Winsock中accept函数获取到的ip地址一直为204.204.204.204或0xcccccccc的解决方案

出现问题的原因

我这边出现问题的代码如下:

SOCKADDR_IN clientAddr;
acceptSocket = accept(ProxyServer, (SOCKADDR*)&clientAddr, NULL);
printf("客户端IP为:%s", inet_ntoa(clientAddr.sin_addr));//输出204.204.204.204

我这里是accept函数出现了这个问题,其实用getpeername等函数获取有问题的,应该都大同小异,不信往下读一读: )。

代码一亮出来,老师傅可能一眼就看出来问题所在了,但是却折腾了我半个小时,相信点进来的朋友也都有类似的问题吧!

首先解释为啥是204.204.204.204或者0xcccccccc

204换成16进制是0xcc,这是vc初始化堆栈的时候使用的数据。

所以说,如果出现了204.204.204.204,那么说明数据没有被正确的写入我们所指定的SOCKADDR_IN类型的变量中。

解决方案

accept函数的第三个参数,是要求我们写入第二个参数的大小的!但是出问题的代码里面用的是NULL!不信看看上方第二行代码!

(p.s. 这是俺们某次实验,老师给了实例代码,默认第二个参数、第三个参数都是NULL,但是要往上魔改加新功能啊,但是俺又是新手啊!!就只改了第二个参数,第三个参数忘记改了!!!)

解决方案也很简单,把第三个参数给了就可以了(笑)

getpeername等函数获取有问题的,解决方法同理,把大小参数给指定了就可以了!

所以上方代码更正后的结果如下:

SOCKADDR_IN clientAddr;
int sockaddr_in_size = sizeof(SOCKADDR_IN);//给定第三个参数
acceptSocket = accept(ProxyServer, (SOCKADDR*)&clientAddr, &sockaddr_in_size);//把第三个参数传进去
printf("客户端IP为:%s", inet_ntoa(clientAddr.sin_addr));

参考链接

[1] https://blog.csdn.net/wu_lai_314/article/details/8374905
[2] https://zhidao.baidu.com/question/569840007.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值