clientsocket的一个问题,50分吧!(50分)

  • 主题发起人 主题发起人 gdd
  • 开始时间 开始时间
G

gdd

Unregistered / Unconfirmed
GUEST, unregistred user!
如果clientsocket.host所取得网站并不存在时,或连接不上时
clientsocket.Open的时候,就会有‘windows socket error:(10049) on api connect’
请问如何在clientsocket.open 之前判断?
 
在 OnError 事件中,

var
strErr :string;
case ErrorEvent of
eeConnect: strErr :='与 ' +clientsocket.host+ ' 的连接产生连接错误';
eeDisconnect: strErr :='与 ' +clientsocket.host+ ' 的连接产生关闭错误';
eeReceive: strErr :='与 ' +clientsocket.host+ ' 的连接产生接收错误';
eeSend: strErr :='与 ' +clientsocket.host+ ' 的连接产生发送错误';
eeAccept: strErr :='与 ' +clientsocket.host+ ' 的连接产生链入错误';
else
strErr :='与 ' +clientsocket.host+ ' 的连接产生普通错误';
end;
Application.MessageBox(pchar(strErr),'系统提示:',MB_OK+MB_ICONWARNING);
ErrorCode :=0 ; //本句消除产生的错误 避免源代码产生错误提示
 
try
clientsocket.open;
except
showmessage('连不上');

end;
 
to zwhc: 不行呀,单步跟踪的时候好象并没有触发onerror事件呀。
to cjfandhf: 在try 的时候就已经出现错误信息了。
 
try
clientsocket.active:=true;
except
....
end;
我以前一直都是这样做的,你试试吧。
 
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if pos('10049',intTostr(ErrorCode)) > 0 then
raise Exception.Create('不能连接'+clientsocket.host);
end;
 
to terry_lzs: 也是出现同样的错误呀!
to xushucheng:单步跟踪的时候好象并没有触发onerror事件呀.
 
好象可以用onlookup事件的,但是我不会用呀,各位高手们帮帮忙了!
 
加上断点试试
 
procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.host:='asdf'
clientsocket1.port:=80;
clientsocket1.Open; //出错!
end;
但是不会触发onerror过程.
我只是个网络的初学者,看了帮助好象与nlookup过程有关,但是又不回用呀,
 
在 http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=314533 中提到可以
不让windows弹出异常错误窗口。但是我想应该onerror过程或onlookup过程能更好地
解决问题的,请大家继续给予帮忙,谢了。
 
多人接受答案了。
 
对不起,这几天比较忙,很少上来。

我这些时间也在和 Socket 打交道,原以为我那段代码
可以解决所有的异常了,事实上却不尽然。

我查了一下 10049 错误码,其含义如下:
sckAddressNotAvailable
10049
Address not available from the local machine.

估计和我遇到的 10065(Host unreachable)一样,在源代码内
部就被清除了错误码了(但仍给出错误窗口,通知用户发生错误
了)。

现在没时间测你那情况,你可以跟踪到源代码里看一下是怎么回
事:
把 $(DELPHI)/Source/Vcl 路径加到你的项目的搜索路径:
project->options 中的 directory/conditionals search path
=====================
BTW:
用 Try 应该可以解决问题吧。
 
ERROR很多ERROR拦不到,用Application.OnException和ERROR一起可以做到
 
在下是新手,但是窃以为,用Try捕获异常不管用。我以前经常遇到10061的错误,用try except不报错,系统仍然弹出错误信息。后来在OnError事件里执行ErrorCode:=0就解决乐。
 
后退
顶部