现在编写一段代码来实现将数据库中大量贴子粘贴到一网站中,在测试时发现经常是发了部分贴子后就要报‘socket error #10054 connect reset by peer’错,怀疑程序未考虑网站服务程序处理贴子的时间延迟,但不知道如何处理,请高手指教。
附程序代码: //先获取COOKIES ,如果不获取COOKIES,发贴次数一多时就会报 ‘connect time out’错,即超时,通过设置httpClient.ReadTimeout:=1000来解决也不行,奇怪的是设置httpClient.ReadTimeout:=1000程序反而产生‘Read Timeout’的异常,无赖用次办法来解决,不知道有无更好的办法?
Cookie:='';
i:=0;
J:=0;
httpClient.AllowCookies:=true; LoginUrl:='http://222.233.12.35/ZZFW/hdcx.asp';
Response:= TStringStream.Create('');
LoginInfo:= TStringList.Create; LoginInfo.Clear;
LoginInfo.Add('ClassID=2');
LoginInfo.Add('ClassChild_ID=19');
try
httpClient.Post(LoginUrl,LoginInfo,Response);
except
showmessage('登陆失败');
end;
for i :=0 to httpClient.Response.RawHeaders.Count-1 do
begin
if UpperCase(Copy(httpClient.Response.RawHeaders[i],1,10)) = 'SET-COOKIE' then
begin
Cookie :=Trim(Copy(httpClient.Response.RawHeaders[i],12,MAXINT));
Cookie :=Copy(Cookie,1,Pos(';',Cookie));
MyCookList :=MyCookList+Cookie;
end;
end;
httpClient.Request.RawHeaders.Add('Cookie: '+MyCookList);
//开始发贴
LoginUrl:= 'http://222.233.12.35/ZZFW/Search_Result.asp?ClassID=2&ClassChild_ID=19'; WHILE NOT ADOTable1.Eof DO
BEGIN
LoginInfo.Clear;
LoginInfo.Add('SDE='+trim(ADOTable1.FieldByName('A').AsString));
i:=0;
try
ResponseStream:=TMemoryStream.Create;
try
J:=0;
httpClient.Request.Referer:='http://222.233.12.35/hdcx.asp?sID=2&Child_ID=19';
//通过循环来控制服务器未响应的发贴,直到响应为止,但次方式并不能解决问题。
while i=0 do
begin
try
i:=1;
httpClient.Post(LoginUrl,LoginInfo,ResponseStream);
except
i:=0;
end;
end
except
end;
except
end;
附程序代码: //先获取COOKIES ,如果不获取COOKIES,发贴次数一多时就会报 ‘connect time out’错,即超时,通过设置httpClient.ReadTimeout:=1000来解决也不行,奇怪的是设置httpClient.ReadTimeout:=1000程序反而产生‘Read Timeout’的异常,无赖用次办法来解决,不知道有无更好的办法?
Cookie:='';
i:=0;
J:=0;
httpClient.AllowCookies:=true; LoginUrl:='http://222.233.12.35/ZZFW/hdcx.asp';
Response:= TStringStream.Create('');
LoginInfo:= TStringList.Create; LoginInfo.Clear;
LoginInfo.Add('ClassID=2');
LoginInfo.Add('ClassChild_ID=19');
try
httpClient.Post(LoginUrl,LoginInfo,Response);
except
showmessage('登陆失败');
end;
for i :=0 to httpClient.Response.RawHeaders.Count-1 do
begin
if UpperCase(Copy(httpClient.Response.RawHeaders[i],1,10)) = 'SET-COOKIE' then
begin
Cookie :=Trim(Copy(httpClient.Response.RawHeaders[i],12,MAXINT));
Cookie :=Copy(Cookie,1,Pos(';',Cookie));
MyCookList :=MyCookList+Cookie;
end;
end;
httpClient.Request.RawHeaders.Add('Cookie: '+MyCookList);
//开始发贴
LoginUrl:= 'http://222.233.12.35/ZZFW/Search_Result.asp?ClassID=2&ClassChild_ID=19'; WHILE NOT ADOTable1.Eof DO
BEGIN
LoginInfo.Clear;
LoginInfo.Add('SDE='+trim(ADOTable1.FieldByName('A').AsString));
i:=0;
try
ResponseStream:=TMemoryStream.Create;
try
J:=0;
httpClient.Request.Referer:='http://222.233.12.35/hdcx.asp?sID=2&Child_ID=19';
//通过循环来控制服务器未响应的发贴,直到响应为止,但次方式并不能解决问题。
while i=0 do
begin
try
i:=1;
httpClient.Post(LoginUrl,LoginInfo,ResponseStream);
except
i:=0;
end;
end
except
end;
except
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货