出现问题的原因

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

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

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

  1. qt获取开发板ip地址_qt获取网络ip地址的类

    最近在学习qt网络编程,基于tcp和udp协议. 看了一些别人的程序和qt4自带的例子,困扰我最大的问题就是获取ip的类,总结起来还挺多的. 主要介绍常用的QtNetwork Module中的QHos ...

  2. python --获取内网IP地址

    方法一 import socketdef get_local_ip_address():ip_address = ''try:# 获取本机主机名hostname = socket.gethostnam ...

  3. linux编程获取本机IP地址的三种方法

    这是一项不太清晰而且没有多大意义的工作.一个原因是网络地址的设置非常灵活而且都是允许用户进行个性化设置的,比如一台计算机上可以有多块物理网卡或者虚拟网卡,一个网卡上可以绑定多个IP地址,用户可以为网卡 ...

  4. 前端Vue中获取本机ip地址

    前端Vue中获取本机ip地址 1.打开谷歌浏览器,地址栏输入chrome://flags,进入. 2.搜索Anonymize local IPs exposed by WebRTC,将其设置为Disa ...

  5. centos7 shell 获取ip_Linux Shell脚本中获取本机ip地址方法

    方法一:ifconfig -a ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "a ...

  6. Shell脚本中获取本机ip地址,Linux获取本地ip地址

    在 Shell 脚本中获取本机 IP 地址可以通过多种方式实现,这里介绍三种常用的方法: 1. 使用 ifconfig 命令获取本机 IP 地址 ifconfig 命令可以获取本机网卡的配置信息,包括 ...

  7. 【Java网络编程】获得实验室局域网中所有开机主机名称和IP地址,InetAddress类,在java中如何获取IP地址的方法

    获得实验室所有主机的IP地址和主机名 一.InetAddress类 二.获得指定IP地址和主机名的主要方法以及练习 1.主要方法 2.源码 三.获得实验室局域网中所有开机主机名称和IP地址 1.源码 ...

  8. 如何从HttpServletRequest中获取外网IP地址

    如何从HttpServletRequest中获取外网IP地址 Java 中可以通过HttpServletRequest类的getRemoteAddr(); //可能是用户真是ip也可能是代理服务器的i ...

  9. java获取本机ip地址_代码片段:获取系统所有IP

    问题 在Windows系统中,可以支持多个网卡,比如有线的以太网卡,无线网卡,虚拟网卡等.如下图所示: 每一张网卡由不同的类型,也可以分别被用户启用或禁用. 对于单独一张给定的网卡,其IP地址可以是D ...

最新文章

  1. Python中爬虫框架或模块的区别
  2. docker ubuntu镜像_Docker 入门指南 | Linux 中国
  3. 手机自动化测试:Appium源码分析之跟踪代码分析四 1
  4. Python numpy 平方、乘方和平方根函数
  5. python全局变量在程序执行的全过程有效_PYTHON使每个过程都可以访问全局变量
  6. SSh结合Easyui实现Datagrid的分页显示
  7. dm9000 driver 1
  8. MyBatis自定义类型处理器 TypeHandler
  9. Arrays.asList()返回的ArrayList,这是Arrays里内嵌的一个私有静态类,而并不是java.util.ArrayList类
  10. oracle避免同一sql多次查询,Oracle SQL - 在一个查询中生成一行答案的最简单方法,因此我不必多次运行查询?...
  11. 关于_vmvare workstation装32ubuntu的问题
  12. 02. Creating a Web Forms User Interface
  13. Python数据分析模块 | pandas做数据分析(三):统计相关函数
  14. 11-6-线程的概念
  15. 机器翻译市场需求调研报告
  16. 【国家统计局】统计用区划和城乡划分代码2019
  17. Medusa学习Medusa参数使用
  18. 美国医院权威评估体系
  19. 使用Proxmox 和 Deskpool 搭建桌面云系统
  20. linux如何删除ntfs分区,Ubuntu中增添NTFS分区的方法

热门文章

  1. 计算机专业毕业答辩问代码吗,计算机专业毕业论文答辩技巧
  2. Camtasia实用技巧之时间轴
  3. 二进制部署K8S集群
  4. nl-mean程序下载_将MEAN应用程序部署到Amazon EC2(第1部分)
  5. java8的LocalDate、LocalDateTime和之前的Date、Calendar
  6. java方法注释都英文_JDK源码中的英文注释翻译(Class)
  7. Jenkins服务器实战-臧雪园-专题视频课程
  8. android系统重力感应传感器 方向控制与方向切换,android sensor orientation 方向传感器 重力感应...
  9. 输入一行字符,统计其中字母、数字和其他符号的个数。例如,输入:As123 g1b,9 输出:字母个数:4 数字字符个数:5 其他字符个数:2
  10. EditText设置IME动作问题