如何读取Indy控件在网络通讯中的出错信息?(50分)

  • 主题发起人 主题发起人 sydxw
  • 开始时间 开始时间
S

sydxw

Unregistered / Unconfirmed
GUEST, unregistred user!
当IdClient连接服务器时和连接成功后,如何读取出错的信息。是用的哪个属性/方法?
问题比较简单,大家不要晕倒啊!^_^
是在这个位置(×××)吗?
try
IdClient.Connect(10000);
except
on E: Exception do ×××
谢谢
 
怎么没有人回复呢?是不是我说的不够明确?
具体问题是:如何获取Error ID 对应的错误提示。
比如:当错误代号为:10061时 提示:连接被拒绝(Connection refused)等等
 
procedure Tform.ClientSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Application.MessageBox(PChar('网络连接失败!! ' + IntToStr(ErrorCode)), '提示', MB_OK + MB_ICONINFORMATION);
ErrorCode := 0;
end;
 
var
ErrCode:Integer;
begin
try
IdTCPClient1.Connect(1000);
except
on E:Exception do
begin
ErrCode:=GStack.WSGetLastError;
ShowMessage(SysErrorMessage(ErrCode));
end;
end;
end;
 
to:smokingroom提示错误:
[Error] client.pas(53): Undeclared identifier: 'GStack'
GStack需要引用什么单元吗?
 
引用IdStack;
 
to:怡.梦
我用的是Delphi7的Indy控件,阁下的代码是Socket or Indy?
 
to:smokingroom
请问在连接成功后,如果Client和Server之间的连接断开,应该怎么处理?小弟没做过,请大哥多指教 ^_^
 
基本上不用你自行處理了,Indy已經處理得很好了.
 
我正在看你的网站,英雄啊 能留一个QQ号码给我吗?[:D]
 
承蒙厚愛,慚愧! QQ已短信發給你了.
 
^_^,我的意思是,当网络连通后断开时,如何在Client端给出错误信息?
 
首先需要说明的是,外部原因产生的连接中断,比如服务器自主中断与客户端的连接,网络故障等,必须要主动获知,也就是要自己检查,它并不会以事件方式通知.
当然,如果正在接收或发送数据时断开,它会报错,这是因为接收或发送数据时,它会自动检查是否已经断线. 如果没有数据的接收或发送,连接后无论服务器中断还是网线拔除,它都会保持Connected=True的状态哦.不信,你自己可以试试:(1)Connect (2)网线拔除 (3)ShowMessage(IntToStr(Ord(IdTCPClient1.Connected)));结果一定是"1"
所以,你如果要获取断线错误,只要在接收或发送数据时捕捉就可以了.
try
WriteBuffer....//或ReadBuffer...
except
on E:EIdSocketError do...
begin
ShowMessage(SysErrorMessage(E.LastError));
end;
end;
当然,如果你要在其它时候检查是否断线,可以如下:
try
IdTCPClient1.CheckForGracefulDisconnect(True);
except
on E:EIdSocketError do
begin
ShowMessage(SysErrorMessage(E.LastError));
end;
end;
 
以上代码需要引用IdException.
 
我马上去试试,顺便问一下,这些方法您是在什么资料上找到的呀?我之前也看了很多资料,但是,没有什么合适的。如果以后我再遇到相关的问题,应该去查哪些资料呀?请大侠给点点,^_^ ^_^
 
这是根据源代码得知的,我也没有相关资料,只是看源代码.
 
接受答案了.
 
后退
顶部