N
netbug
Unregistered / Unconfirmed
GUEST, unregistred user!
一: 我想搜索一台主机的哪个端口是活动的,请看我的程序:
procedure TForm1.Button1Click(Sender: TObject);
var i,j,s:integer;
begin
clientsocket1.Address:='192.1.1.1';
for i:=22 to 25 do
begin
clientsocket1.Port:=i;
clientsocket1.Open;
if clientsocket1.Socket.Connected then
begin
edit1.Text:=inttostr(i);
edit2.Text:=clientsocket1.Socket.RemoteAddress;
break;
end;
end;
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorcode:=0;
end;
我在单步执行这个程序时,发现在执行到clientsocket1.Open这句时就弹出出错信息10061,
即连接被拒绝,下一句判断是否处于连接状态的语句根本未执行。我知道我的这台主机的23端口是
活动的,22端口是处于不活动状态,(我是想测试一下,为另外的程序做准备),我用的是阻塞方式,
我如用非阻塞方式,那我在单步执行这个程序时,发现即使在i:=23时,程序仍然在执行到
if clientsocket1.Socket.Connected时,认为连接是非连接状态,最后程序仍出错,系统提示:
Can't change value while socket is active.
我想问:该如何解决这个问题?
二:我想问:如用非阻塞方式,系统如何通知程序已完成连接?程序如何获得并处理信息?
谢谢。
procedure TForm1.Button1Click(Sender: TObject);
var i,j,s:integer;
begin
clientsocket1.Address:='192.1.1.1';
for i:=22 to 25 do
begin
clientsocket1.Port:=i;
clientsocket1.Open;
if clientsocket1.Socket.Connected then
begin
edit1.Text:=inttostr(i);
edit2.Text:=clientsocket1.Socket.RemoteAddress;
break;
end;
end;
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorcode:=0;
end;
我在单步执行这个程序时,发现在执行到clientsocket1.Open这句时就弹出出错信息10061,
即连接被拒绝,下一句判断是否处于连接状态的语句根本未执行。我知道我的这台主机的23端口是
活动的,22端口是处于不活动状态,(我是想测试一下,为另外的程序做准备),我用的是阻塞方式,
我如用非阻塞方式,那我在单步执行这个程序时,发现即使在i:=23时,程序仍然在执行到
if clientsocket1.Socket.Connected时,认为连接是非连接状态,最后程序仍出错,系统提示:
Can't change value while socket is active.
我想问:该如何解决这个问题?
二:我想问:如用非阻塞方式,系统如何通知程序已完成连接?程序如何获得并处理信息?
谢谢。