TIdTCPServer接受字符串 ( 积分: 100 )

  • 主题发起人 主题发起人 暗夜中独舞
  • 开始时间 开始时间

暗夜中独舞

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
RecvStr: string;
begin
RecvStr := AThread.Connection.ReadString(15);
Memo1.Text := '接受:' + RecvStr;
end;
问题出在 RecvStr := AThread.Connection.ReadString(15);这句,是否一定要限制大小?如果太大,程序出错;太小,比如4,那3*4个可以收到,15-3*4却收不到。
我客户端是C写的,字符串大小也是不定的,有没解决的办法?
 
用AThread.Connection.ReadLn();好了。不用限制大小,遇到结尾符(默认#10,换行符)自动停止。
 
AThread.Connection.ReadLn();什么都读不到呀,我也觉的奇怪了....
 
你的要求是有多少数据就读多少,因此不能用ReadString的方法,这方法是限长度的。
这样做:(基于Indy9)
var RecvStr: String; Len: Integer;
begin
Len := AThread.Connection.ReadFromStack(); //会在线程中无穷等待
SetLength(RecvStr, Len);
Move(AThread.Connection.InputBuffer.Memory^, PChar(RecvStr)^, Len)
AThread.Connection.InputBuffer.Remove(Len);
//--然后可以使用RecvStr变量了
//如果使用了界面VCL组件,应该按多线程的方法进行“同步”
end;
 
接受答案了.
 
后退
顶部