L
lzy6204
Unregistered / Unconfirmed
GUEST, unregistred user!
实现要求:
【服务端】:安装了一个简单服务程序,用于接收客户端发送的信息,并返回一个结果串。
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.如果很多客户端同时发消息给服务端,服务端的相应会不会出现问题? 采用多线程是否能解决此问题
如果客户端确实是因为同步操作问题而接收不到数据,那么这样的问题如何解决或者说如何避免,请有相关经验的朋友帮忙解答一下,谢谢了!
【服务端】:安装了一个简单服务程序,用于接收客户端发送的信息,并返回一个结果串。
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.如果很多客户端同时发消息给服务端,服务端的相应会不会出现问题? 采用多线程是否能解决此问题
如果客户端确实是因为同步操作问题而接收不到数据,那么这样的问题如何解决或者说如何避免,请有相关经验的朋友帮忙解答一下,谢谢了!