关于INDY控件错误铺抓问题

zly1980 2008-10-15 10:45:09
我用BCB6(INDY不记得版本了)或者BCB2007(INDY10)里面 IDTELNET控件.
就是直接建立一个winfrom程序,在界面拖了个IDTELNET出来.
之后连接到telnet服务器,如果在连接的过程中,网络出现错误的话,那么应用程序会弹出错误:
raised exception class EIdSocketError whith meessage 'Socket Error # 10054 Connection reset by peer.'

我想知道我的才程序可以自己处理这些错误吗?如果可以是怎么个方式进行错误的铺获,而不是动不动就弹出一个对话框来.
...全文
254 点赞 收藏 10
写回复
10 条回复
samkaola 2012年06月09日
这个问题大家怎么处理的呀
回复 点赞
Waiting4you 2008年10月15日
这个错误应该可以被WinMain里的catch抓到(就是Project->View Source里的代码)
回复 点赞
zly1980 2008年10月15日
可能我对INDY的组件模式还是理解上有问题吧.
大家也对我的问题理解有所错误.
我在界面拉了个IDTELNET出来,之后一个MEMO,在MEMO的KEYPRESS事件把key通过idtelnet发到服务器上去/
idtelnet接收到的数据在MEMO显示出:
//发送输入的按键
void __fastcall TForm1::Memo1KeyPress(TObject *Sender, char &Key)
{
IdTelnet1->SendCh(Key);
Key=0;
}
//显示接收到的数据
void __fastcall TForm1::IdTelnet1DataAvailable(TIdTelnet *Sender,
const AnsiString Buffer)
{
AnsiString s;
int i;
s=Buffer;
while(1)
{
i=s.Pos("\r");
if(i<1) break;
s.Delete(i,1);
s.Insert("\n\n",i);
}
while(1)
{
i=s.Pos("\n\n");
if(i<1) break;
s.Delete(i,2);
s.Insert("\r\n",i);
}
if(Memo1->Lines->Count<1) Memo1->Lines->Add("");
Memo1->Lines->Strings[Memo1->Lines->Count-1]=
Memo1->Lines->Strings[Memo1->Lines->Count-1]+s;
}
//连接
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try
{
IdTelnet1->Host=Edit1->Text.Trim();
IdTelnet1->Port=atoi(Edit2->Text.c_str());
IdTelnet1->Connect();
}
catch (...)
{
;//如果在点连接的时候服务器连接不上的时候,可以铺抓到异常.这里没有问题
}
}


现在的问题是:我点Button1连接成功,welcome...的字符也出来了,我输入用户跟密码后,已经连接成功了.
这个时候我什么都不做,直接把电脑的网络断开(可以是把连接禁止或者把我网线拔掉,总之结果就是造成运行程序的主机到服务器的网络是不通的)
那么等一下程序就弹出:
raised exception class EIdSocketError whith meessage 'Socket Error # 10054 Connection reset by peer.'
这个错误了,这个时候我没有执行任何的操作,我的代码是抓不到的,这个控件也没有OnError类的事件给到我.我应该在怎么得到这些错误异常呢?
回复 点赞
yuanreid 2008年10月15日

try
{
IdTelnet1->Connect();
}
catch(Exception &e)
{
ShowMessage(e.Message);
}


可以在catch住错误后,自行处理,这里是显示错误提示。
回复 点赞
yuanreid 2008年10月15日
try catch是可以拦截这个错误的


try
{
IdTelnet1->Connect();
}
catch(...)
{
}
回复 点赞
netying 2008年10月15日
帮你up
回复 点赞
yuanreid 2008年10月15日
看来是找到方法了。祝贺
回复 点赞
zly1980 2008年10月15日
void __fastcall OnTerminate(TObject* Sender);
void __fastcall OnException(TIdThread* AThread, Exception* AException);

void __fastcall TForm1::Button1Click(TObject *Sender)
{
try
{
IdTelnet1->Host=Edit1->Text.Trim();
IdTelnet1->Port=atoi(Edit2->Text.c_str());
IdTelnet1->ThreadedEvent=true;
IdTelnet1->Connect();
IdTelnet1->TelnetThread->OnTerminate=OnTerminate;
IdTelnet1->TelnetThread->OnException=OnException;
//while(1){Application->ProcessMessages();}
}
catch (...)
{
;
}
}
好象这样错误,断开连接等...都过来了
回复 点赞
laowang2 2008年10月15日
upup
回复 点赞
yuanreid 2008年10月15日
这个错误只能被winmain拦截了。

try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);//在这里进行你自己的错误处理
}
回复 点赞
发动态
发帖子
网络及通讯开发
创建于2007-08-02

902

社区成员

8891

社区内容

C++ Builder 网络及通讯开发
社区公告
暂无公告