15 12
发新话题
打印

请教问题:关于UDP Socket

请教问题:关于UDP Socket

大家好!我最近遇到一个问题:一个服务器产品(windows平台),用UDP socket接受数据,一般都是7*24小时运行。遇到的问题是:如果长时间没有数据流入/出,好像UDP socket自己就关闭了,以后再不能接收数据,只能重启软件

用最常见的方式创建UDP Socket,即:(1) socket(xxx)(2)bind(xxx)(3)recvfrom(xxx)

其中创建了thread来处理recvfrom。

对这个问题感觉比较困惑。有熟悉这方面的朋友吗?请指点一下。多谢。

TOP

你是不是用了线程池之类的东西,因为线程被回收了,所以不能接受数据了。以前有个同事也这么说,最后发现是线程池的问题。

TOP

我用了线程,但是没有用线程池。线程是一直在run的。。。

TOP

可以做个测试看看,在收到消息处理的第一行开头写日志什么的。我没用过udp packet,但是tcp的放1年也没事。一般来讲,应该不会。
再查查是不是防火墙的问题。

TOP

为什么要这样做?UDP本来就不擅长做随机小数据流的收发。
走别人的路,让别人无路可走

TOP

引用:
原帖由 pkill 于 2008-3-5 09:43 发表
为什么要这样做?UDP本来就不擅长做随机小数据流的收发。
为什么?请教一下。
个人感觉UDP做小数据的收发比较好,开发简单,开销也小。
万古长空 一朝白雪

TOP

只会tcp的路过

TOP

请确认问题点:好像UDP socket自己就关闭了。

怎么就说“好像UDP socket自己就关闭了”?
超级简单易用的音视频转换组件 支持RMVB解码 FFmpeg for Delphi / VB http://www.CCAVC.com

TOP

我用WireShark抓包,能抓到包。同时,我在UDP socket的recvfrom处理中添加了打印,但是没有打印信息。

检查了线程的状态,还处于激活状态。

综合这些信息,判断UDP socket貌似自己关闭了。

之所以说“好像”,是因为我认为这似乎是不可能的,不排除程序其他地方出错导致收不到UDP package。

另外,也不会是防火墙的问题,原因(1)检查过防火墙,确认已经关闭;(2)UDP socket最初仍然能接受package,只是如果长时间空闲后,貌似接收不到数据了。

困惑啊!
引用:
原帖由 CodeCoolie 于 2008-3-5 12:13 发表
请确认问题点:好像UDP socket自己就关闭了。

怎么就说“好像UDP socket自己就关闭了”?
[ 本帖最后由 justademo 于 2008-3-5 12:34 编辑 ]

TOP

netstat -an -p udp

确认监听端口还在?
超级简单易用的音视频转换组件 支持RMVB解码 FFmpeg for Delphi / VB http://www.CCAVC.com

TOP

 15 12
发新话题