请问我用TIdHTTP在多线程中网一地址POST数据,每次POST1064字节,但发了一阵子后就会报
"Socket Error # 10048 Address already in use."不知怎么解决.
好象是说地址已经在使用,但为什么会发了一阵子后才报呢?
附上线程里的代码:
while (i <> iCount) do
begin
msSend.Clear;
rs.Clear; Fms.Position := i * MainForm.iPerTransSize;
//取到块头信息
iTemp := FiBigBlockNO * FiCountBlock + i ;
msHead := TStringStream.Create(MainForm.getHead(iTemp));
msSend.CopyFrom(msHead, HttpUploadUnit.HEADSIZE);
msSend.Position := HttpUploadUnit.HEADSIZE;
msHead.Free;
//每次发送的内容
if(i = iCount - 1) then
msSend.CopyFrom(Fms, Fms.Size - i * MainForm.iPerTransSize)
else
msSend.CopyFrom(Fms, MainForm.iPerTransSize);
try
//数据发送
idHTTPPost.Post(FstrPostUrl, msSend, rs);
//如果返回值正确,则发送下一块数据
if(getResult(rs) = '1') then
begin
Inc(i);
Synchronize(UpdateProgressBar);
end
else
begin
inc(iErrorCount);
if(iErrorCount > 2) then
begin
MainForm.memo1.Lines.Add('线程' + IntToStr(FiBigBlockNO) + '出错!');
Exit;
end;
end;
except
inc(iErrorCount);
if(iErrorCount > 2) then
begin
MainForm.memo1.Lines.Add('线程' + IntToStr(FiBigBlockNO) + '出错!');
MainForm.ThreadIsOk[FiBigBlockNO] := false;
Exit;
end;
end;
end;
MainForm.ThreadIsOk[FiBigBlockNO] := true;
目前是开了一个线程来测试的,也还是出现上述错误,问题是我用IdHTTP来发送,又不是新开一端口再次发送,为什么会运行一段时间后才报此错呢?谢谢大家了.
该怎么解决呢?
"Socket Error # 10048 Address already in use."不知怎么解决.
好象是说地址已经在使用,但为什么会发了一阵子后才报呢?
附上线程里的代码:
while (i <> iCount) do
begin
msSend.Clear;
rs.Clear; Fms.Position := i * MainForm.iPerTransSize;
//取到块头信息
iTemp := FiBigBlockNO * FiCountBlock + i ;
msHead := TStringStream.Create(MainForm.getHead(iTemp));
msSend.CopyFrom(msHead, HttpUploadUnit.HEADSIZE);
msSend.Position := HttpUploadUnit.HEADSIZE;
msHead.Free;
//每次发送的内容
if(i = iCount - 1) then
msSend.CopyFrom(Fms, Fms.Size - i * MainForm.iPerTransSize)
else
msSend.CopyFrom(Fms, MainForm.iPerTransSize);
try
//数据发送
idHTTPPost.Post(FstrPostUrl, msSend, rs);
//如果返回值正确,则发送下一块数据
if(getResult(rs) = '1') then
begin
Inc(i);
Synchronize(UpdateProgressBar);
end
else
begin
inc(iErrorCount);
if(iErrorCount > 2) then
begin
MainForm.memo1.Lines.Add('线程' + IntToStr(FiBigBlockNO) + '出错!');
Exit;
end;
end;
except
inc(iErrorCount);
if(iErrorCount > 2) then
begin
MainForm.memo1.Lines.Add('线程' + IntToStr(FiBigBlockNO) + '出错!');
MainForm.ThreadIsOk[FiBigBlockNO] := false;
Exit;
end;
end;
end;
MainForm.ThreadIsOk[FiBigBlockNO] := true;
目前是开了一个线程来测试的,也还是出现上述错误,问题是我用IdHTTP来发送,又不是新开一端口再次发送,为什么会运行一段时间后才报此错呢?谢谢大家了.
该怎么解决呢?
//在执行Post之前先执行下面:
if idHTTPPost.Connected then idHTTPPost.Disconnect;//数据发送
idHTTPPost.Post(FstrPostUrl, msSend, rs);
......