急救,indy控件的winsock10055错误(缓冲buffer不足)!!送200分(200分)

  • 主题发起人 主题发起人 zhu_xf
  • 开始时间 开始时间
Z

zhu_xf

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在编写离线浏览器软件,需要下载大量网页。使用了indy控件及多线程,但是下载某个网站时,当下载到2万-5万个网页时,会出现winsock10055错误(缓冲buffer不足)。这时,不但程序重新运行也不行,而且用IE也浏览不了网页。我查看了以前的帖子,说是发生错误时,没有释放socket,而这个网站也确实经常发生503错误(Service Temporarily Unavailable)。但是我在发生错误时释放了socket还是不行。
function TTaskThread.Get(Url:string):boolean;
begin
try
...........
IdHTTP.Get(Url,StreamSource);
...........
excpt
IdHTTP.DisconnectSocket;
sleep(10000);
end;
end;
因为这个错误不容易调试,很是焦急。
请各位大侠指点。
 
这么做看看:
function TTaskThread.Get(Url:string):boolean;
var
TempHttp:TIdHttp;
begin
TempHttp:=nil;
try
TempHttp:=IdHttp.Create;
TempHttp.Get(Url,StreamSource);
...........
finally
TempHTTP.free
end;

end;
 
qlj的方法消耗资源比较得多。
我编写了一个测试的程序,采用100个线程,还是采用原来的语句,但是将一些辅助的东西如:保存,解析等去掉了,而且不停对同一个Url进行Get。奇怪得很,运行到10万个以上还没有错误。
 
哦。
我想起来了,
是不是因为你在再次使用StreamSource之前没有clear?
最好让StreamSource.Position:=0;不然再次接收的数据将会累加到StreamSource
后面,那么就有可能出现缓冲不足等现象了。
你试试
 
我每次用StreamSource.size:=0来清空。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
948
import
I
I
回复
0
查看
855
import
I
后退
顶部