请教各位网友:问个如何使用try...finally去判断socket端口的问题(0分)

  • 主题发起人 主题发起人 netbug
  • 开始时间 开始时间
N

netbug

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序是个客户端的程序,它的功能是:
试图与一个服务器连接(服务器的IP是已知的,但Port是未知的),
当连接成功时,程序结束并返回Port,请看:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
clientsocket1.Address:='127.0.0.1';
for i:=2 to 100 do
begin
clientsocket1.Port:=i;
clientsocket1.Active:=true;
if clientsocket1.Socket.Connected then
begin
edit1.Text:=inttostr(i);
exit;
end else clientsocket1.Active:=false;
end;
end;
但此程序在运行老是出现ESocketError的错误(10061),
故我想用try....finally这样的语句,但不知
该如何写,请问:如按我以上所说的该程序要
完成的功能,我该如何写呢?谢谢
 
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
clientsocket1.Address:='127.0.0.1';
for i:=2 to 100 do begin
clientsocket1.Port:=i;
try
clientsocket1.Active:=true;
edit1.Text:=inttostr(i);
exit;
except
continue;
clientsocket1.Active:=false;
end;
end;
end;
 
写个SocketOpen(FSocket,FCanceled,FTimeOut)的函数,在Socketopen中调用线程来打开端口。
if not SocketOpen(FSocket,FCanceled,FTimeOut) then 返回FSocket的端口号。
这样肯定没有问题。我在扫描smtp端口时就是这么做的。
 
接受答案了.
 
后退
顶部