使用Indy的idTcpCient如何判断接收缓冲区中是否有数据? ( 积分: 100 )

  • 主题发起人 主题发起人 Kensa
  • 开始时间 开始时间
K

Kensa

Unregistered / Unconfirmed
GUEST, unregistred user!
想使用idTcpClient接收数据,但是使用ReadStream、ReadBuffer等相关函数会导致阻塞,想在调用这些函数之前判断缓冲区内有没有数据,确发现idTcpClient没有提供相关的接口。又不想使用idAntiFrozen。
哪位大侠能够指点一二?
 
想使用idTcpClient接收数据,但是使用ReadStream、ReadBuffer等相关函数会导致阻塞,想在调用这些函数之前判断缓冲区内有没有数据,确发现idTcpClient没有提供相关的接口。又不想使用idAntiFrozen。
哪位大侠能够指点一二?
 
建立线程一直 Resume,给你一段 indy自带的例子

procedure TClientHandleThread.Execute;
begin
while not Terminated do
begin
if not ClientFrmMain.Client.Connected then
Terminate
else
try
ClientFrmMain.Client.ReadBuffer(CB, SizeOf (CB));
Synchronize(HandleInput);
except
end;
end;
end;
 
这个是专门读取TCP缓冲区数据的:
Size:=IdTCPClient.ReadFromStack(False, -1, False); 参数是否引发异常和超时毫秒数
Size返回大于0 表示有数据
 
To hzxhzx123
这个Size是否就是可读的数据大小?
 
后退
顶部