我的程序是这样的,向远程主机发送ping数据包,根据返回的包判断是否是通的。现在实现的思路是接受和发送分开处理,先把测试包全部发送出去,等了一段时间后开始接受分析。测试发现,当ip增大到几百个的时候,有些现实是通的ip但是却没接受到包。
我的问题是,在有大量的包到来的时候,recvfrom这个函数能不能正确接受到发送过来的每个包,会不会出现丢包的现象才导致了上面的问题?

解决方案 »

  1.   

    UDP吧,是没有设置非阻塞的原因吗
      

  2.   

    TO:LuckilyYu(菜鸟要飞翔!) 我的情况是能接受到一部分数据,另一小部分接受不到,和阻塞模式有关吗
      

  3.   

    UDP是不可靠的,它不能保证发送的数据一定能收到。用TCP
      

  4.   

    TO: Avoid(千金散尽还复来) 
    我这里是直接用的socket的sendto、select、recvfrom函数,和widows的ping差不多,就是直接打包发送数据,没有使用什么协议吧
      

  5.   

    UPD会丢包,用UPD就必须容忍这点.
      

  6.   

    udp会丢包?既然这样,那udp协议就是不可靠的,用udp协议发送和接受数据岂不是郁闷了,不可靠的协议还有什么用呢
      

  7.   

    udp的优势是发送数据比tcp快,tcp协议本身有很多机制来保证数据的完整性,udp本身是系统只管发送,对方能不能收到系统不会管.(PS:发现上次回复,把udp,写成UPD了,这几天太晕了)
      

  8.   

    看来要想保证udp发送和接受的可靠性,还要有其他的机制?
      

  9.   

    那么再请问下,如果我要实现测试远程主机是否是通的这个功能,是不是两种实现方法?一种就是不可靠的udp的非连接,另一种是不是可靠的基于连接的?