应该很难,由于UDP不是面向连接的网络协议,所以在用UDP协议来传送数据时,在数据发送后,并不能确认对方是否接收到

解决方案 »

  1.   

    在消息传递线程中,当发送方发送消息时,接收方如果有收到消息包,则返回一个'收到'消息给发送方,发送方以此来判断是否发送的消息是否丢包。这需要线程SLEEP一定的时间。如果没有收到接收方返回的信息包,则可再次尝试发包。如此反复N次,如果始终没有收到返回包,则考虑用TCP方式或其他中转方式进行消息的重传递。
      

  2.   

    接收方在收到数据后向发送方发送确认消息,如果发送方在指定的时间里没有得到确认消息的话,认定发送失败,重新发送数据 
    --------------------- 
    我试了,发送时等待线程特别慢,是我写的方式不对吗?能否提供实例原形码提示一下.谢谢!!
    你既然能收就能发,在客户端收到消息后马上向服务器发送一条收到标识
    UDPCLIENT.SEND()既然是要求数据完整,为什么不用TCP呢??????
      

  3.   

    1.使用TCP
    2.使用UDP,並自己定義一套協議來實現數據完整性驗證重傳機制
      

  4.   

    tcp对客户端的实时连接数量有限制,用Udp是因为它占用服务器的资源少,速度快.但丢包的现象比较多.我解决的甚不理想.想请求有经验者.
      

  5.   

    UDP+定制的协议可以在很大程度上解决UDP丢包多的现象。我建议你现在先不急着写代码实现,不妨看点UDP或相关的知识,然后就考虑一个客户端会遇到什么情况,如何处理。比如:
        客户端要发送信息,要先知道对方IP,这需要跟服务器通讯。然后发送信息,但此时信息发送不成功(丢包),因为没有“打洞”信息    客户端发送'打洞信息'及收到'请求打洞信息'如何处理。    客户端发送信息(打洞后):怎么判断是否对方收到信息?要执行几次才能判断对方是真的收不到信息?确定对方收不到信息了怎么办?  定制的协议就是在这    客户端收到信息要怎么处理:给发送方发送收到所发送的消息的确认