一个有关网络编程中遇到的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 mahaibo
  • 开始时间 开始时间
M

mahaibo

Unregistered / Unconfirmed
GUEST, unregistred user!
诸位高手们:
我想在DLL实现这么一个函数。在函数中要用到一个IDUdpServer及IdUdpClient,IdUdpClient将请求发送到远程服务器中,IdUdpServer负责接收远程服务器回应。如果收到了回应,则退出该函数。如果超过指定时间(比如5秒)还未收到回应,也退出函数。哪位仁兄能给出一个实现方法,如果分数不够可另外再加。
 
诸位高手们:
我想在DLL实现这么一个函数。在函数中要用到一个IDUdpServer及IdUdpClient,IdUdpClient将请求发送到远程服务器中,IdUdpServer负责接收远程服务器回应。如果收到了回应,则退出该函数。如果超过指定时间(比如5秒)还未收到回应,也退出函数。哪位仁兄能给出一个实现方法,如果分数不够可另外再加。
 
不会吧?大富翁高手这么多,连这问题都没人能回答吗?如果有人能提供解决方法,我愿再多给100分
 
怎么没人回应呢?
 
很长时间的帖子了么!回应一下好了!
一般来说大可不必这么麻烦,IdUdpClient在Send完毕以后可以调用一个ReceiveString的函数,在IdUdpClient中有一个ReceiveTimeout的参数,这个参数就是控制ReceiveString函数的过期时间的!一般来说只要服务器端直接回应到发送端的发送端口就能收到这个回应了!可能说得有点含糊,帖一段源代码好了,代码有点垃圾,多多见谅:

procedure TMainForm.LoginUDP();
var
ReceivedString: String;
i:byte;
label thisPC;
begin
i:=0;
UDPClient.Active:=True;

FillChar(ReceivedString,length(ReceivedString),0);

thisPC:
Begin
UDPClient.Send('TEXT');
try
ReceivedString := UDPClient.ReceiveString();
finally

end;
end;

if ReceivedString = '' then
begin
inc(i);
if i<2 then//重试2次
goto thisPC
else
begin
//连接失败
end;
application.ProcessMessages;
end
else
begin
//连接成功
end
end;
 
这样不行的,有时能成功接收,有时不行,很不稳定。
 
直接加个定时器就成啊(api 也有定时器);

前题,你的远程端必须有“立即回应消息”的功能;
 
后退
顶部