首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

UDP简单应用,待,利马揭帖

2012-03-14 
【急】UDP简单应用,在线等待,利马揭帖实现要求:【服务端】:安装了一个简单服务程序,用于接收客户端发送的信息,

【急】UDP简单应用,在线等待,利马揭帖
实现要求:
【服务端】:安装了一个简单服务程序,用于接收客户端发送的信息,并返回一个结果串。
procedure   TUDPMainForm.UDPServerUDPRead(Sender:   TObject;   AData:   TStream;   ABinding:   TIdSocketHandle);
var
    DataStringStream:   TStringStream;
    s:   string;
begin
    s:= 'BBB ';
    DataStringStream   :=   TStringStream.Create( ' ');
    try
        DataStringStream.CopyFrom(AData,   AData.Size);
        if   DataStringStream.DataString   =   'AAA '   then
        ABinding.SendTo(ABinding.PeerIP,   ABinding.PeerPort,   s[1],   Length(s));
    finally
        DataStringStream.Free;
    end;
end;
【客户端】:向服务器发送一个请求消息,并接收服务端的返回结果。
    with   FUDPClient   do
    begin
        Send( 'AAA ');
        sRecive   :=   Trim(ReceiveString());
    end;


【问题】:假如客户端比较少,而且操作不频繁,现在的程序没有任何问题
但是一旦客户端增多,而且操作非常频繁(客户端同时给服务端发消息的几率大大增加)
这个时候问题就来了,经常接收不了数据。

请问:
    1.使用UDP通信是否有客户端数量和连接数的限制?
    2.如果很多客户端同时发消息给服务端,服务端的相应会不会出现问题?     采用多线程是否能解决此问题

如果客户端确实是因为同步操作问题而接收不到数据,那么这样的问题如何解决或者说如何避免,请有相关经验的朋友帮忙解答一下,谢谢了!

   


[解决办法]
UDP丢包很正常
[解决办法]
UDP 也没什么多线的办法, 收数据用的是 recvform 这个只能由单线去完成
receform 类同于 tcp 的 listen, 有一个 maxconn 限制, 限制在 5, 换句话说, 同时 5 个消息在队列中没处理就会引起丢包
因此, udp 的收数据线程应该很单纯, 单纯到只收数据到一个 buffer, 用另外线程去处理, 任何的处理都不应在本线程完成, 让在队列中的消息始终小于 5
[解决办法]
1.使用UDP通信是否有客户端数量和连接数的限制?
UDP丢包很正常。


2.如果很多客户端同时发消息给服务端,服务端的相应会不会出现问题?
要解决丢包问题,必须有应答机制。多线程与丢包没啥关系。

热点排行