我觉得你的TTCPBLockSocket用的效率上有问题。我是这么用的。虽然没有测试国速度。不过感觉很快。
//DOLoop是线程循环
procedure TRecvThread.DoLoop;
begin
if fSocket.LastError = 0 then
begin
if fSocket.CanRead(1000) then
begin
fRecvSize := fSocket.WaitingData;
if fRecvSize > fBufSize then
fRecvSize := fBufSize;
fSocket.RecvBuffer(fBuf, fRecvSize);
fQueue.Write(fbuf^, fRecvSize);
fOutFile.Write(fbuf^, fRecvSize);
end;
end
else begin
//网络连接中断,线程退出
{$IFDEF mmdebug}
DB_WriteStrLn(0, '4.RecvThread Broken...');
{$ENDIF}
QuitThread;
end;
end;