各位大侠好,我做的UDP通信的程序,是在软件启动时就开始监听,收到某些特定数据后发消息,现在收和发都没有问题了,但是我发现这个问题:当我有几秒不收数据后就总是收不到了,直到我往外发送一条消息后才能再继续收到数据,再隔几秒收不到就又收不到了,这是怎么回事呢,为什么会收不到呢?收和发有什么联系呢?望各位高手指点!

解决方案 »

  1.   

    首先和你写的程序逻辑有关.这个需要你自己参考其他人代码.或者经验了其次是udp本身是不安全的连接,会丢包.当网络不稳定的时候尤其严重.
      

  2.   

    如果你的电脑是在局域内,通过NAT与外网连接,当你通过一个端口向外发送数据时,NAT会分配一个端口,通过这个端口与外网通讯,如果一段时间不收发数据,NAT就会自动收回这个端口,这样外网就无法发送数据过来了。如果是这个问题可以通过发送心跳包来解决。
      

  3.   

    我的是CDMA手机,给PC机发送数据,这个PC机是与路由器连接的,通过做端口映射来将UDP端口映射到PC机上,PC机总是能收到数据,出现我所说这个问题的是CDMA手机,这个CDMA手机应该是直接与外网相连的吧,请您帮我分析一下这种情况吧,谢谢您了
      

  4.   

    啊,我还没有接触过心跳包这个概念,就是说每隔多少秒发一个包来防止收回端口是吗?那您说像我这种情况,这是不是CDMA手机收回了端口呢
      

  5.   

    对手机不了解,不过你可以用心跳包来试试,用SetTimer设置一个定时器,每秒发送一个包,看看能否解决这个问题。
      

  6.   

    我发心跳包是设置的三秒钟发送一次,这样就没有什么问题了,端口不会被回收,但是我觉得它不应该这么快就收回啊,至少也得等几分钟再收回啊,所以是不是我的程序还是有问题呢,有什么相关的设置项吗,像这种UDP0接收的有没有什么相关的测试项啊?
      

  7.   

    1~2分钟的比较常见,但你的运行环境是手机,所以就不好说了,有可能是几秒钟。如果有地方设置,也应该是在系统中找,与UDP协议没有关系。