请教各位网友,问个Delphi中有关激活socket时遇到的问题:(我的钱包空了)(15分)

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

 
一、ClientSocket 要和 SeverSocket 配套使用吧。

如果“一”通过了,“二”就不必多说了吧
 
<font color=green>netbug,你可不可以做得不要太过分?我都替你结束了好几十个问题了。
问0分的问题大家也一样回答你,但是那些问题别人回答了你也不给一个意见?
你这样做尊重别人么???还有好像你来这里光是问问题而不回答问题?(当然这
一点不是很重要!)</font>
 
多人接受答案了。
 
后退
顶部