一个困扰我已2个月的奇怪问题,谁能解决,我送200分给他(她)(200分)

  • 主题发起人 主题发起人 qby
  • 开始时间 开始时间
Q

qby

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Indy的TIdDNSResolver解析一个邮箱域名,如:163.com。想得到它的 MX 记录。
用了两种方法:

方法1:在TForm上放一个TButton, 再拖放一个TIdDNSResolver,
然后设置TIdDNSResolver的属性为:

Active := False;
Host := '61.139.2.69';
Port := 53;
ReceiveTimeout := 1000;
BufferSize := 8192;
BroadcastEnabled := False;
AllowRecursiveQueries := True;
QueryRecords := [qtMX];

然后:
procedure TForm1.Button5Click(Sender: TObject);
begin
IdDNSResolver1.Active := True;
IdDNSResolver1.Resolve('163.com');
......
end;

方法2:TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
......
private
{ Private declarations }

FDNSResolver: TIdDNSResolver;
public
{ Public declarations }
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
FDNSResolver := TIdDNSResolver.Create(nil);
try
with FDNSResolver do begin
Host := '61.139.2.69';
Port := 53;
ReceiveTimeout := 1000;
AllowRecursiveQueries := True;
QueryRecords := [qtMX];
Active := True;

Resolve('163.com');
end;
finally
FDNSResolver.Free;
end;
end;

另人感到异常奇怪的是:方法1每次都能够很好地完成工作,并正确地解析出'163.com'。
但方法2在执行到 Resolve('163.com'); 一行时,则有时正确、有时出错,错误为
TimedOut错误。方法1和方法2的ReceiveTimeout都是1000,为何方法1不会出现错误呢?
且这两种方法我认为应该是完全相同的。但为何出现两种情况呢?本人进行了无数次的实验,结果均如此。
我的平台是:win2000(中文)、delphi6.0(Build 6.240、update Pack 2)、Indy 9.0

各位老大,救救我吧!200分送上,不够还有!!!!!!!!
 
现在网站上的邮箱加有硬件防火墙,并都需要身份验证了,别忘了这一点。
 
与我的情况有联系吗?
 
应该是控件的问题,你在resolve之前沿时一段时间,可能就会解决问题,我对这个控件不熟,应该可以判断某个状态,等到“ready”时才可以继续执行的。
 
到底是怎么回事呀!着急呀!
 
没有人救俺吗?
 
还是无人会吗?
 
'163.com'信箱不好处理,我公司使用代理软件上网,就是没办法在OutLook中
设置好信箱帐号。
 
应该是active:=true时程序要重设控件状态需要时间此时马上执行Resolve('163.com')程序认为active:=false
 
wcgcw:
那为什么方法1可以呢?很感谢你的解答!
 
检查方法2生成的咚咚有没有真正FREE掉
 
看看是不是方法2的控件其他设置有问题?
 
好像就是一个时间先后的问题。我以前遇到过类似的情况。
如果没有记错Resolve('163.com'); 这句放到with 语句之外就没有问题了。
看看别人的回答。
 
陈晨:
你能说的详细具体点吗?谢谢你!
 
后退
顶部