recvfrom error 10022

recvfrom error 10022http://blog.sina.com.cn/s/blog_6ffee9410100pqdt.html折腾了一个下午加大半个晚上,查了300多个网页,20多个技术论坛,终于把这个问题解决了,真不容易。总结下出现这个错误的一般原因和我出错的原因。出现这个错误的一般原因:1.fromlen参数没有初始化2.from参数没有设置正确,也就是结构问题3.参

大家好,又见面了,我是你们的朋友全栈君。

http://blog.sina.com.cn/s/blog_6ffee9410100pqdt.html

折腾了一个下午加大半个晚上,查了300多个网页,20多个技术论坛,终于把这个问题解决了,真不容易。总结下出现这个错误的一般原因和我出错的原因。

出现这个错误的一般原因:

1.fromlen参数没有初始化

2.from参数没有设置正确,也就是结构问题

3.参数作用域问题

我出错的原因:

在查找过程中,曾发现部分帖子上说过bind()的问题,但自恃对UDP通信了如指掌,入行以来所做的UDP客户端为了不跟其他程序抢端口,提高程序的通用性,从来不绑定也没出过错,不屑地认为他们在胡说八道,纯粹外行人的说法。不想这回还真栽这上边了。

这个系统我采用了一个套接字4线程通用的方法,在主线程中初始化,在接收线程、网络预处理线程、处理线程、发送线程中共用。考虑到各个线程的同步和信息同步的问题,首先启动的是接收线程。于是问题出来了,recvfrom函数一直在报错10022,look error说是参数错误。在网上查了大半天,几乎所有参数都进行了改动尝试,断点取值查看,结果参数一点问题都没有,甚至将以前的程序拷贝过来测试也没用,十分郁闷,都准备晚上不睡觉奋战到底了。

百度google的网页都快翻遍的时候实在受不了了,摔了鼠标去冲咖啡。闻到咖啡浓香的时候突然想到一个问题:socket之所以不绑定,是系统会自动分配端口,这只是对发送函数来讲的,如果不绑定而直接调用接收函数,如果我是写这个函数的人,我会怎么办?我知道该从哪个端口接收吗?不知道。如果我随便找个端口,有一种情况会根本没法处理,就是只接收数据而不往外部发送数据的时候,整个系统,包括外部要通信的系统都不会知道我在这个端口接收数据,那这个接收函数就变得毫无意义。我当然不会白痴到留下这么个漏洞,那个比我高N级的编写这个的软件工程师更加不会。所以,要报错。所以就有了10022。

当然,这只是假想,只是猜测,要经实际验证的。我绑定个端口后发现竟然通了,假想得到验证。

另外一种猜想:如果不绑定端口,而在接收之前进行一次发送,依照我的上一个猜想,依然可以行得通。因为在发送的时候系统自动分配了端口,这样除了发送函数知道那个端口外,系统其他部分也知道了。当然,这只是猜想的猜想,还需要验证。不过今天晚上太晚了,还有点东西没调完,明天再验证吧。

花了这么多时间,查了这么多资料,发现我犯的错误竟然是前无古人,后难有来者,所有的资料中都没有记载或者没有解释。当真值得记上一笔。

以后多想想编这个系统的人是怎么想的,或许能省点时间,毕竟他们也是人,再高级的工程师也是写程序的,跟我本质上没什么区别,区别就在于他们都比我年纪大。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163429.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • linux ubuntu 关闭防火墙命令,LINUX关闭防火墙的方法

    linux ubuntu 关闭防火墙命令,LINUX关闭防火墙的方法LINUX关闭防火墙的方法导语:LINUX关闭防火墙的方法,你懂吗?下面的是百分网小编为大家搜集的LINUX关闭防火墙的方法,欢迎阅读,谢谢!(1)重启后永久性生效:开启:chkconfigiptableson关闭:chkconfigiptablesoff(2)即时生效,重启后失效:开启:serviceiptablesstart关闭:serviceiptablesstop需要说…

    2022年10月26日
  • 逻辑运算符Python_逻辑运算符的优先级

    逻辑运算符Python_逻辑运算符的优先级#练习1:定义一个整数变量age,编写代码判断年龄是否正确age=180#要求人的年龄在0~120之间#if0<=age<=120:#新语法ifage>=0andage<=120:print(“年龄正确”)else:print(“年龄不正确”)…

    2022年11月3日
  • vue人脸识别_vue不是内部或外部命令

    vue人脸识别_vue不是内部或外部命令1.vue报错:无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

    2022年8月18日
  • eclipse护眼颜色和字体大小设置[通俗易懂]

    eclipse护眼颜色和字体大小设置[通俗易懂]♣eclipse护眼颜色和关键字颜色设置♣eclipse字体大小设置(包括jsp,.xml,.java)1.Eclipse字体大小调整: 窗口(Window)-首选项(Prefer

    2022年8月1日
  • BH1750光照传感器超详细攻略(从原理到代码讲解,看完你就懂了)

    BH1750光照传感器超详细攻略(从原理到代码讲解,看完你就懂了)BH1750FVI是一款数字型光强度传感器集成芯片,内部由光敏二极管、运算放大器、ADC采集、晶振等组成。PD二极管通过光生伏特效应将输入光信号转换成电信号,经运算放大电路放大后,由ADC采集电压,然后通过逻辑电路转换成16位二进制数存储在内部的寄存器中(注:进入光窗的光越强,光电流越大,电压就越大,所以通过电压的大小就可以判断光照大小,但是要注意的是电压和光强虽然是一一对应的,但不是成正比的,所以这个芯片内部是做了线性处理的,这也是为什么不直接用光敏二极管而用集成IC的原因)。

    2022年6月2日
  • 疫后本地生活踏入拐点,全面升级的饿了么助力身边经济

    疫后本地生活踏入拐点,全面升级的饿了么助力身边经济7月10日饿了么宣布全面升级,从餐饮外卖平台转变为解决用户身边一切即时需求的生活服务平台,并将在未来大力布局“身边经济”,打造应有尽有的生活圈。眼下,整个经济正在迎来疫情后的反弹复苏,以餐饮、生鲜、零售为代表的消费行业加速反弹,饿了么在此时宣布全面升级,可谓顺势而为,在笔者看来,此次全面升级,有两大看点。在后疫情时代,饿了么从餐饮外卖平台转型同城生活服务,也将对整个本地生活服务会产生深刻的影响。看点1:饿了么为什么在此时宣布全面升级?在零售的战场上,时机和火候往往决定一切。饿了么此次..

    2022年6月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号