多次close, create udp socket后,为啥该socket接收不到之前server发过来的数据?

tsingmei 2008-12-09 05:57:50
问题场景如下:
使用异步udp socket,向IP1发送数据包,接收到IP1返回的UDP数据回复,然后关闭socket,然后再重启socket,再发送数据包,接收返回的UDP数据包。如此多次往复。大约10多次后,socket可以向IP1发送数据包,可是IP1返回的UDP数据包用iris抓包,可以看到数据包已经到了网卡,但是recv函数却没有被调用。

此时,如果我把IP1换成IP2的另外的UDP服务器,数据可以正常发送,也可以正常接收。

大约10多分钟后,我重启客户端程序,再次向IP1发送UDP数据包,此时客户端程序可以接收到IP1服务器返回的UDP数据包。

是不是windows有什么保护机制?谢谢!
...全文
137 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
沙漠里的海豚 2008-12-12
  • 打赏
  • 举报
回复
你发送的消息多长?频率呢?

能不能把代码贴部分出来看看
tsingmei 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dirdirdir3 的回复:]
有关系,socket关闭的话需要完整的关闭,再重新创建启动.............
[/Quote]

是的呀... udp socket这个就是调用close呀,然后再create呀...

重启socket,这个可以成功,send()函数也可以成功,iris也可以抓到服务器返回的udp数据包,数据包到网卡了,就是recv函数不被调用。过一段时间后,就可以了。是不是系统对频繁close、create某个特定IP的socket有什么限制或者bug?
scq2099yt 2008-12-10
  • 打赏
  • 举报
回复
再重启socket

这个成功了吗?
dirdirdir3 2008-12-10
  • 打赏
  • 举报
回复
有关系,socket关闭的话需要完整的关闭,再重新创建启动.............
JulianSeaver 2008-12-10
  • 打赏
  • 举报
回复
看看你的代码吧. UDP又不像TCP.应该没有完整关闭一说. 再说你可以发数据的话.应该也是可以收数据的.
tsingmei 2008-12-09
  • 打赏
  • 举报
回复
这个和代码无关吧?:) 无论是异步socket还是非阻塞socket,都有这样的现象。是不是windows的什么机制?
cnzdgs 2008-12-09
  • 打赏
  • 举报
回复
代码怎么写的?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧