UDP 数据报服务器端,怎么样在大量客户端的情况下,保证不丢包呢? ********* 在线等待,马上结帖。(100分)

  • 主题发起人 主题发起人 coolingxyz
  • 开始时间 开始时间
C

coolingxyz

Unregistered / Unconfirmed
GUEST, unregistred user!
我用udp数据报方式在客户端和服务器端进行通信,客户端有很多,
可能同时向服务器发送信息,我的问题是服务器端怎么样才能保证不丢
包呢?
请大家帮忙呀?可用分不多,先送上100分。
 
你可以在程序里面设计一个机制就是一方发送一方返回进行判断是否丢包
如果丢包就再发
 
udp数据报方式本身就是面向无连接的用户数据报协议,在客户端和服务器端进行通信时不可能
保证100%不丢包,这是本协议的本质决定的,除非你换用其它可靠的面向连接的协议如tcp/ip
 
UDP本身无法保证不丢包,他是给那些实时要求教高的应用使用的
但是可以通过一些办法保证较小的丢包率:
1、每个UDP包的体积小,小于460个字节,减少分片,从一定程度上可以减少丢包
2、提高接受缓冲区的大小,把接受缓冲设为10K以上
3、采用一问一答,每个包编号,自己采用一套机制,但是这样就太复杂,也是
QQ比MSN慢的原因
 
谢谢大家回答,关键不是udp数据会不会丢包的问题,是万一有很多客户端同时发消息给服务器,服务器该怎么接受才能尽量保证少的丢包情况发生。
 
服务器最快的处理完接受到的包,同时设置较大的缓冲区就可以了一定程度上避免这个问题
 
IdUDPServer 控件有ThreadedEvent属性 , 是不是和这个有关, 具体应该怎么做?
 
我不太喜欢用控件,都用winsock函数写代码,对这个不熟
UDP是无连接的,可能这个属性是你判断是否新建一个线程
的处理事件把
 
我建议使用最新的由IEEE定义的数据流协议(Stream Protocol),它具有TCP/IP,及UDP/IP的
功能和优点,它已经成功运用在电信网络中,担当重要角色。
 
多人接受答案了。
 
后退
顶部