C++ builder idHTTP Get 相关问题

春华-秋实 2013-03-11 02:41:19
请高手回答下,谢谢啦。
我用idhttp 的Get 方法 从服务器上下载个文件,服务器正常运行是没有错误的,当服务器关闭后,则直接报错,退出程序,请问这种情况该如何处理,报错为:exception class EidSocketError with message "Socket Error # 10061 connection refused",能不能在下载前查看服务器是否可用,该如何修改,请指教,有代码最好,小弟新手。。
...全文
976 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
春华-秋实 2013-03-12
  • 打赏
  • 举报
回复
引用 2 楼 ksrsoft 的回复:
下载前,先连接,下载中catch异常错误
请教下,如何在下载前,先连接?小弟新手~
春华-秋实 2013-03-12
  • 打赏
  • 举报
回复
引用 1 楼 cankoo 的回复:
捕捉下异常不就OK了
谢谢,我也那样写了,只是我还想捕捉异常后,程序不需要退出,可以继续执行。这个如何实现?请赐教~
春华-秋实 2013-03-12
  • 打赏
  • 举报
回复
引用 5 楼 ccrun 的回复:
引用 4 楼 jinlu7611 的回复:catch到异常的时候,程序就会立即退出,怎么可以catch 到异常的同时,程序不会立即退出? 我看看你的代码先。
代码很简单,我也用的是try catch 来写的,如下: AnsiString http = "地址";//需要下载的文件的路径 TMemoryStream *myStream = new TMemoryStream(); try { IdHTTP2->Get(http,myStream); } catch(...) { ShowMessage("服务器连接失败,请稍后重试"); myStream->Free(); } 现在的情况就是,出错 ShowMessage 的同时,还有个系统提示,说 Access Violation ,关掉这个提示后,程序就停止运行了。
ccrun.com 2013-03-12
  • 打赏
  • 举报
回复
引用 4 楼 jinlu7611 的回复:
catch到异常的时候,程序就会立即退出,怎么可以catch 到异常的同时,程序不会立即退出?
我看看你的代码先。
春华-秋实 2013-03-12
  • 打赏
  • 举报
回复
引用 3 楼 ccrun 的回复:
将get的语句放在try...catch中,捕捉异常就行了。
catch到异常的时候,程序就会立即退出,怎么可以catch 到异常的同时,程序不会立即退出?
春华-秋实 2013-03-12
  • 打赏
  • 举报
回复
引用 18 楼 ccrun 的回复:
当服务器有问题的时候,下载触发了异常,你catch里面Free了,然后catch的外面又Free一次,这不AV才怪。
是两次Free导致的么?感谢,我去试下,感谢妖哥的指导。在11楼说的我记住了,现在改过来了。
ccrun.com 2013-03-12
  • 打赏
  • 举报
回复
当服务器有问题的时候,下载触发了异常,你catch里面Free了,然后catch的外面又Free一次,这不AV才怪。
ccrun.com 2013-03-12
  • 打赏
  • 举报
回复
看到 returnString->Free(); 我就心凉了,赶情我在11楼就白说了啊。
春华-秋实 2013-03-12
  • 打赏
  • 举报
回复
引用 15 楼 ccrun 的回复:
请贴出完整代码。
妖哥,完整的代码相当大,是个比较大的工程,和下载文件有关的代码如下: if(request_Sent == 0) { //Char* Url = "http://172.21.4.138:8080/UnionUpdate/UnionUpdateService"; Char* request = "?param=<?xml%20version=\"1.0\"%20encoding=\"utf-8\"?><Request><RequestType>mobileVersion</RequestType><MobileVersionParams><OpType>verifyRom</OpType><ClientVersion>"; Char* ClientVersion = "KABW960_CH.2.02.220"; Char* request2 = "</ClientVersion><RomSize>123456789</RomSize><UserName></UserName><SystemOuterVersion></SystemOuterVersion><FileType>img</FileType><CustomizationType>konka</CustomizationType>"; Char* request3 = "<Paramater1></Paramater1><Paramater2></Paramater2><Paramater3></Paramater3></MobileVersionParams><OtherParams></OtherParams></Request>"; StrCat(request,ClientVersion); StrCat(request,request2); StrCat(request,request3); StrCat(Url,request); TStringStream *returnString=new TStringStream(""); try { IdHTTP1->Get(Url,returnString); } catch(...) { ShowMessage("服务器连接错误,请稍后重试"); returnString->Free(); } AnsiString rs = returnString->DataString; returnString->Free(); request_Sent = 1; } 在服务器打开的情况下,是OK的,现在主要想完成的就是在服务器关闭的情况下,进行服务器繁忙提示,而不是报错终止程序。
ccrun.com 2013-03-12
  • 打赏
  • 举报
回复
请贴出完整代码。
春华-秋实 2013-03-12
  • 打赏
  • 举报
回复
引用 13 楼 ccrun 的回复:
不需要检测什么,有了try...catch就行了。脱离了IDE运行时,就不会弹出异常框了。


额?难道是我的环境有问题,我怎么在抛出异常后面,还有个错误提示,单击确定按钮后,程序就结束了?提示如下: Access violation at address 00522A6C in module ‘XXXX.exe’.read of address 000000008.
这个是什么情况?
ccrun.com 2013-03-12
  • 打赏
  • 举报
回复
不需要检测什么,有了try...catch就行了。脱离了IDE运行时,就不会弹出异常框了。
春华-秋实 2013-03-12
  • 打赏
  • 举报
回复
引用 11 楼 ccrun 的回复:
当然有区别。 1. C++Builder中的对象,尽量用new来创建,用delete来销毁。Free方法是为了兼容Delphi,不建议在C++Builder中使用。 2. 不管Get方法成功与否,myStream都要释放,所以将释放语句拿出来放在try的外面就行了。有异常的时候catch会捕捉到。
哦,明白,妖哥,这个是语法中的问题。请问有什么方法处理 这种情况:在抛出异常后,程序继续执行?只是给出一个提示。能不能在get之前对http进行检测,查看是否可达?我有看NMEcho 组件可以实现网络检测,但是不是非常懂。
ccrun.com 2013-03-12
  • 打赏
  • 举报
回复
当然有区别。 1. C++Builder中的对象,尽量用new来创建,用delete来销毁。Free方法是为了兼容Delphi,不建议在C++Builder中使用。 2. 不管Get方法成功与否,myStream都要释放,所以将释放语句拿出来放在try的外面就行了。有异常的时候catch会捕捉到。
春华-秋实 2013-03-12
  • 打赏
  • 举报
回复
引用 9 楼 ccrun 的回复:
myStream->Free(); 这一句严重不建议。改成这样: C/C++ code?1234567891011AnsiString http = "地址";//需要下载的文件的路径TMemoryStream *myStream = new TMemoryStream();try{ IdHTTP2->Get(http,myStream);}catch(...)……
这个有区别么?
ccrun.com 2013-03-12
  • 打赏
  • 举报
回复
myStream->Free(); 这一句严重不建议。改成这样:
AnsiString http = "地址";//需要下载的文件的路径
TMemoryStream *myStream = new TMemoryStream();
try
{
    IdHTTP2->Get(http,myStream);
}
catch(...)
{
    ShowMessage("服务器连接失败,请稍后重试");
}
delete myStream;
ccrun.com 2013-03-11
  • 打赏
  • 举报
回复
将get的语句放在try...catch中,捕捉异常就行了。
缘中人 2013-03-11
  • 打赏
  • 举报
回复
下载前,先连接,下载中catch异常错误
cankoo 2013-03-11
  • 打赏
  • 举报
回复
捕捉下异常不就OK了

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧