我陪上全部家当,你们怎么还不理我,5555(35分)

  • 主题发起人 主题发起人 netbug
  • 开始时间 开始时间
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.
我想问:该如何解决这个问题?
二:我想问:如用非阻塞方式,系统如何通知程序已完成连接?程序如何获得并处理信息?
谢谢。


 
可以拦截异常嘛
用try语句
 
能不能具体地举例说一说
 
~~~~算了吧!~~~~~~~~~~~~~~~~用代理猎手.
 
我是我不想要,而是我不会
 
要是用ics就好多了。
 
请教:如何用ics?谢谢。
 
ics的 TWSocket 控件

wsock.Addr=...
wsock.Port=...
wsock.Connect()
while(true)
begin
Application.processmessages
if .... then //等待事件 OnConnection , 不管成功失败都有这个事件,error标志成功失败
break;
end
 
ics的 TWSocket 控件

wsock.Addr=... //这行每次都要,虽然都是一样的地址,但是每次close都会清除他
wsock.Port=...
wsock.Connect()
while(true)
begin
Application.processmessages
if .... then //等待事件 OnConnection , 不管成功失败都有这个事件,error标志成功失败
break;
end
wsock.Close
 
对不起,Pipi,我找不到TWSocket这个控件,我用的是Delphi5.0,
请问:我该到哪去找TWSocket这个控件?谢谢.
 
http://www.rtfm.be/fpiette/indexuk.htm
下载ics控件,
 
后退
顶部