本人写了一个UDP的客户端与服务器程序,服务器端使用一段时间后,发现不能再接收数据。开使认为是不是并发原因造成的,但根据UDP的原理,并发不应该堵死,于是我用一个办法测试了一下:
1、服务器端只接收数据,不对数据做任何处理
2、客户端每10个MS向服务器发送一条数据,并同时开启了40个客户端。
测试结果,没有被堵死,服务器运行正常。于是我在想是不是我的服务器端接到数据后在处理数据造成的,因为我在程序里有对数据库进行操作,所以会不会是这个原因,请碰到过类似情况的高手们指点一二。

解决方案 »

  1.   

    不接收数据的时候,你检测的UDP的SOCKET 是否挂了 
      

  2.   

    针对(月黑风高) 的答复,我个人觉得,开辟线程可能会提高数据传输的质量,但不应该是影响UDP不能接收数据的主要原因,不知道分析的对不对。
      

  3.   

    我现是接收数据后,根据数据的条件,从数据库里取出对应的信息,再发给客户。
    请教高手能不能说明这个过程中,影响UDP不能接收的关键原因,做个分析,谢谢
      

  4.   

    处理数据的过程应当另开一个或若干个线程来处理,如果接收数据后,立即调用处理过程,那么只有处理完成了才会接收下个数据包。这也是导致丢包最重要的因素之一。UDP包有的是在路由中转中途丢失的,有的却是抵达目标端口后由于目标端口无法接收而丢弃,这种情况的丢包很可惜。完全可以通过程序的改进避免。
    最好是收到数据后立即缓存起来,另外有个线程从缓存取数据处理,而接收数据的过程专心接收数据,其他什么事也不干。
      

  5.   

    前几年做过一段时间的Udp传输接受数据的工作。接受数据比发送数据更要讲究,下功夫。
    我同意zohan的分析。接收数据的线程,只能接收数据,处理一个数据另开一个线程。处理完后要释放。估计你的程序中处理数据的线程有漏洞,有的能释放线程,数据异常时,陷入死循环,不能释放线程。时间常了,计算机资源耗尽就玩完了。