社区
网络通信/分布式开发
帖子详情
急急急:谁能解决TIdHTTP.Get超时无响应的问题???我愿意出RMB解决。
icedheart
2008-04-13 07:33:23
关于在目的URL繁忙或者网络异常的情况下,,TIdHTTP.Get(URL)没有任何信息反馈,一直阻塞在这里,导致整个线程停止,try...except也无法捕获异常,网络搜索这方的解决办法,但是一直找不到,ConnectTimeout或者ReadTimeout根本不起作用,哪位大侠有这方面的解决办法的???请出手相助,我出RMB也行,不过不要太多就可以了……
...全文
1700
39
打赏
收藏
急急急:谁能解决TIdHTTP.Get超时无响应的问题???我愿意出RMB解决。
关于在目的URL繁忙或者网络异常的情况下,,TIdHTTP.Get(URL)没有任何信息反馈,一直阻塞在这里,导致整个线程停止,try...except也无法捕获异常,网络搜索这方的解决办法,但是一直找不到,ConnectTimeout或者ReadTimeout根本不起作用,哪位大侠有这方面的解决办法的???请出手相助,我出RMB也行,不过不要太多就可以了……
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
39 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
likeyrain
2010-07-01
打赏
举报
回复
可以用截包工具截一下有没有在工作啊,再根据截到的包分析是那步有问题,
apilove
2010-06-29
打赏
举报
回复
换成ICS !!
Indy问题多!!!
Frank.WU
2010-06-29
打赏
举报
回复
放在线程里面,设置线程中断标志。需要的时候就退出线程。
singlexinglove
2010-06-29
打赏
举报
回复
帮顶一下 ,期待问题解决!!!
nkym0626
2010-06-23
打赏
举报
回复
学习
Flymorn
2010-06-23
打赏
举报
回复
可以使用多线程解决这个问题,把idhttp放到线程里动态创建,这样即使会卡死,也不会卡死主线程。
实际上,卡死还是会发生,只不过在子线程里发生了。
ConnectTimeout 在网络异常或服务器失去响应的情况下 不起作用的,因为 indy 是阻塞式通讯,没有返回就一直等待,直到超时,你可以看下这篇文章提到的方法:
http://www.piaoyi.org/computer/Delphi-INDY-IDFTP-IDHTTP-connecttimeout.html
彻底解决。
knowledge_Is_Life
2008-04-30
打赏
举报
回复
接分是王道!
ERR0RC0DE
2008-04-25
打赏
举报
回复
自己写个SOCKET API client,自己设置ReadTimeout,保证没事,:D
icedheart
2008-04-25
打赏
举报
回复
请问换什么控件可以代替indy?
zzzl
2008-04-21
打赏
举报
回复
以前写用它写抓取网页程序的时候,确实碰见过,百思不得其解,换控件解决的
indy挺垃圾的
enli
2008-04-19
打赏
举报
回复
嗯,有这个问题的,详细见:http://i.92wy.com/html/96/756996-91916.html
icedheart
2008-04-19
打赏
举报
回复
做过的高手出来指点一下,谢谢。
icedheart
2008-04-18
打赏
举报
回复
高手都隐身了么?
icedsoul
2008-04-16
打赏
举报
回复
只要是IDHTTP.GET卡住了就是无限时卡,一直卡着不动了。程序非常简单,不存在问题。
try
IdHTTP.Get(SUPAddress+'Supplier/ProductSaving.asp'); //网络正常的时候没有问题,要是网络慢的时候就一直卡在这里不动了
Memo_Msg.Lines.Add(IntToStr(IdHTTP.ResponseCode));
except
//
end;
ideation_shang
2008-04-16
打赏
举报
回复
服务器一般情况下tcp连接超时时间为5分钟
icedsoul
2008-04-16
打赏
举报
回复
IDHTTP一套那么强大的组件,不应该考虑不到这些网络因素吧???
icedsoul
2008-04-16
打赏
举报
回复
问题就在这里了:
在JAVA服务器端打上了断点的话,哪么是会停在哪里,一直等服务器响应,一般情况是不会的,很快就能返回端服端的信息
到客户端.
如果发送的请求包丢失又或者服务器没有返回数据包、返回的数据包丢失,那么就一直停在这里了。怎么处理这个问题???在网络繁忙、或者目的服务器负载比较重的情况下就发生了我碰到的现象了。
求大侠们想想解决办法。
skylkj
2008-04-16
打赏
举报
回复
IdHTTP是阻塞式的
在indy misc里有个IdAntiFreeze,放上后可以改成非阻塞式
myheartzhang
2008-04-16
打赏
举报
回复
不见可能的,我们就是用IdHTTP1来下载的,一开启程序的时候先检测服务器上有没有最新的版本,
IdHTTP1 可以设置连接时间的,如果超过这个时间,他自动会返回1006,超时错误,
没有一直卡在哪里,然后跳出下载.我们是在JAVA服务器端通信时,如果是调试的时候,
在JAVA服务器端打上了断点的话,哪么是会停在哪里,一直等服务器响应,一般情况是不会的,很快就能返回端服端的信息
到客户端.
procedure HttpDownLoad(const aURL, aFile: string; bResume: Boolean);
var
tStream: TFileStream;
IdHTTP1:TIdHTTP;
begin
try
//如果文件已经存在
if FileExists(aFile) then
tStream := TFileStream.Create(aFile, fmOpenWrite)
else
tStream := TFileStream.Create(aFile, fmCreate);
IdHTTP1:=TIdHTTP.Create(nil);
if bResume then //续传方式
begin
IdHTTP1.Request.ContentRangeStart := tStream.Size - 1;
tStream.Position := tStream.Size - 1; //移动到最后继续下载
IdHTTP1.Head(aURL);
IdHTTP1.Request.ContentRangeEnd := IdHTTP1.Response.ContentLength;
end
else //覆盖或新建方式
begin
IdHTTP1.Request.ContentRangeStart := 0;
end;
try
IdHTTP1.Get(aURL, tStream); //开始下载
finally
tStream.Free;
end;
except
on E: Exception do
begin
raise Exception.Create('下载文件'+aURL+'失败:'+e.Message);
end;
end;
end;
skylkj
2008-04-16
打赏
举报
回复
看了下IdAntiFreeze和IdAntiFreezeBase两个单元.好像不是创建线程的.....
大致看了下,好像是在超时之前一直是一个循环,但是在循环里面有Application.ProcessMessages;所以主程序的界面消息仍然可以得到响应
有哪位大大深入研究过的来说说哈
加载更多回复(19)
Id
http
get方法演示
Id
HTTP
:=
TId
HTTP
.Create(nil); try Response := Id
HTTP
.Get('
http
://example.com'); // 处理返回的Response数据 finally Id
HTTP
.Free; end; end; ``` 3. `Get`方法执行后,
响应
数据会被自动存储在`...
delphi操作Id
HTTP
报头读写
Id
HTTP
:=
TId
HTTP
.Create(nil); end; ``` 2. 设置报头字段:通过调用
TId
HTTP
的Request属性,可以访问到
TId
Http
RequestInfo对象,进而设置各种报头。例如,设置User-Agent和Accept-Language: ```delphi Id
HTTP
....
delphi 7 id
http
post 的8种使用方法(含源码)
有时需要自定义请求头,如Content-Type,这可以通过
TId
HTTP
.Request属性实现: ```delphi
HTTP
.Request.ContentType := 'application/json';
HTTP
.Post('
http
://example.com', PostData); ``` 4. **POST XML...
Delphi XE8 ID
HTTP
1.get()方法從Servlet服务器取json数据
在本示例中,我们探讨了如何在 Delphi XE8 中使用 ID
HTTP
1.get() 方法从一个基于 Servlet 3.1 的服务器获取 JSON 数据。这个过程涉及到 Delphi 客户端与 Java 服务端之间的通信,其中 JSON 用于数据交换格式。以下是...
delphi 7 id
http
post 的8种使用方法
通过 `ReadTimeout` 和 `ConnectTimeout` 属性可控制连接和读取
超时
时间: ```delphi procedure PostWithTimeout(const ADataURL, AJsonData: string; TimeoutSecs: Integer); var
HTTP
:
TId
HTTP
; JSONStr: ...
网络通信/分布式开发
1,594
社区成员
32,947
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章