UDP连接自动断开的问题?

huangzhtao 2011-08-22 11:58:46
系统中有个服务器和客户端,UDP连接的。
在服务器端,处理完以后发送数据,如果没有数据则不发送数据。
客户端采用阻塞方式,没有数据则阻塞在recvfrom函数。
我发现如果服务器长时间不发送数据,一段时间,大概10多分钟以后,客户端就接收不到服务器发来的数据了,这是怎么回事?
难道是UDP长时间不用,系统将其自动关闭了?
请指教,谢谢!
...全文
5006 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq470129050 2012-01-17
  • 打赏
  • 举报
回复
确定是保活时间的问题了吗??我跟你的情况一模一样啊
niulei 2011-12-17
  • 打赏
  • 举报
回复
我现在做的RTP,也发现这个问题,大概15秒就自动断开,然后只有主动连接端主动去连接,然后对方反向连接,才能重新建立连接!
beiyangxiao 2011-09-05
  • 打赏
  • 举报
回复
客户端和服务器端之间的网络一般比较复杂,如路由策略、防火墙、NAT等都会影响两端的通信。可以采用心跳包(如每隔20秒发送一个小的报文通知对端自己的存在,同时也通知了网络设备)避免网络中的设备对UDP的阻断。
huangzhtao 2011-09-05
  • 打赏
  • 举报
回复
在系统中,采用的是两台机器直连的方式,XP系统,把一台机器设置为了网。网关上运行着服务端程序和一个客户端,另一台机器上运行着另一个客户端。
服务器一段时间不发送数据,客户端都处于接受数据的阻塞状态。
一段时间后(10分钟左右),服务器再发生数据,发现在网关那台机器的客户端能够接受到数据,而另一台机器就接受不到数据。
现在发现在网卡设置里面有“允许计算机关闭此设备以节约电源”,一般都会勾上吧。
由于系统现在在现场,目前无法进行测试,只能就此推测是这个问题。
在公司的机器上测试都是好的,即使那个选项勾上了。
目前推测可能是这样,现场的机器上除了必要的一些软件外,其他软件都没有安装,因此如果使用的网络的话,也就是我们的系统使用网络了。而在公司的机器上,都安装了各种软件,可能各种软件都在尝试使用网络,所以没有这个问题。
比较奇怪的一个问题是程序处于Recv阻塞语句时,难道系统认为是不使用网卡设备的?
  • 打赏
  • 举报
回复
这个主要是路由器的原因,路由器会把一段时间不活动的端口给关闭掉,这个时间在路由器里可以设置,建议采用心跳机制
wyx100 2011-09-01
  • 打赏
  • 举报
回复
,UDP有一个保活时间,在P2P中,叫洞,如果这个洞没有一段时间内有数据通过,会关闭
xiaoguailong3 2011-08-25
  • 打赏
  • 举报
回复
心跳,维持链路
hurryboylqs 2011-08-25
  • 打赏
  • 举报
回复
定时激活一下
xspapa1 2011-08-25
  • 打赏
  • 举报
回复
是这样的,UDP有一个保活时间,在P2P中,叫洞,如果这个洞没有一段时间内有数据通过,会关闭
UDX协议 2011-08-22
  • 打赏
  • 举报
回复
是这样的,UDP有一个保活时间,在P2P中,叫洞,如果这个洞没有一段时间内有数据通过,会关闭。

这个时间和特性是和你的NAT设备决定。
Eleven 2011-08-22
  • 打赏
  • 举报
回复
那你的发送端sendto返回SOCKET_ERROR,WSAGetLastError函数返回值是什么先看看~

18,359

社区成员

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

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