TServerSocket的阻塞模式时读取数据,如果CLIENT一直发送,而SERVER没处理完,
就会报错。这个问题怎么处理?
就会报错。这个问题怎么处理?
解决方案 »
- 请教多线程的为什么比打开独立一个应用程序慢的多
- 急急急!SQL表导出为DBF文件和把DBF文件导入数据库的问题,请高手帮忙!
- 有一个Excel表,它有20000行,157列,现在要把它导入SQl server,里面讲的方式不理想,请帮想想有怎么更好的办法?
- TFileStream如何使用啊?谁能详细说明?
- 关于数据编辑状态的问题
- 关于MDI窗体的问题?
- 在Delphi中用ADO怎样连接Excel表
- 需要您的帮助!
- dephie7 DBgri中的数据只能被选中不能修改
- 怎樣才能獲得當前可執行文件所在路徑的上一級目錄的路徑?
- 请问在delphi中怎么实现C++中的结构指针,还要可以传送数据的!
- 初学delphi,有关字符串的问题求教
浪费资源!万分对不起jjweb (jjweb) ,不好意思!!!!!!!!!
我不是用SENDBUF,我是用SENGSTREAM,在那里可以知道返回值?
另外:我这里出现的现象是,CLIENT一直发送,如果SERVER没处理过来,就会报错。
function TCustomWinSocket.SendStreamPiece: Boolean;
var
Buffer: array[0..4095] of Byte;
StartPos: Integer;
AmountInBuf: Integer;
AmountSent: Integer;
ErrorCode: Integer;
....
begin
Lock;
......
while True do
begin
StartPos := FSendStream.Position;
//从流中读一块数据到BUF。
AmountInBuf := FSendStream.Read(Buffer, SizeOf(Buffer)); if AmountInBuf > 0 then //有数据要发
begin
AmountSent := send(FSocket, Buffer, AmountInBuf, 0);//发送
if AmountSent = SOCKET_ERROR then//确定知道发送失败
begin
ErrorCode := WSAGetLastError;//抛出异常
。。
Break;
end;
end else if AmountInBuf > AmountSent then//已经发出数量少于想发数量。
FSendStream.Position := StartPos + AmountSent
else if FSendStream.Position = FSendStream.Size then//到流终点。。
begin
DropStream;
Break;
end;
end else
begin
DropStream;
Break;
end;
end;
Result := True;
....
end;SendStream也不过这样回事,发不出去就死缠着再发,除非确定失败或发完。。
所以我不喜欢用它,呵呵。你可以想想它的流程,或者跟踪调试进去,应该很容易明白错误原因。