使用Indy的IdTCPClient时,怎样接收服务器端的返回? ( 积分: 100 )

  • 主题发起人 主题发起人 qqnm
  • 开始时间 开始时间
Q

qqnm

Unregistered / Unconfirmed
GUEST, unregistred user!
使用Indy的IdTCPClient时,使用Readln函数只能接收服务器端返回的有终结符的字符串,要是服务器端返回的信息中没有终结符而且返回的信息的长度不固定将如何接收?
 
使用Indy的IdTCPClient时,使用Readln函数只能接收服务器端返回的有终结符的字符串,要是服务器端返回的信息中没有终结符而且返回的信息的长度不固定将如何接收?
 
楼主是想实现什么操作呢, 传文件这些都可以传指定长度搞定的,不过要注意文件结束部分的长度, 说下想干嘛,是否有其它行的通的方法
 
动态指定信息的长度,要不然就指定信息长度的范围!
 
用CurrentReadBuffer
 
建议你用IDUdpServer,他即可以发送也可以接收
接收时触发
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
begin
AData 接收到的数据流
AData.Size 数据长度
end;
 
var
Size:integer;
1、读取idTcpClient收到数据的大小:Size;=IdTCPClient.ReadFromStack(False, -1, False); 参数是否引发异常和超时毫秒数,设定为-1为一直读取到有数据或断开。
2、读取idTcpClient收到的信息 AThread.Connection.ReadBuffer(P^,Size);
或AThread.Connection.ReadStream(MmStream,Size);
 
这个时候用CurrentReadBuffer很方便的,
不过默认情况下CurrentReadBuffer一次只能读8k数据,CurrentReadBuffer读的是缓冲区的数据
s:=CurrentReadBuffer;
while s<>'' do
begin
recvstr:=recvstr+s;
s:=CurrentReadBuffer;
end;
最后,recvstr就是我们要从服务器端得到的数据
 
后退
顶部