1,593
社区成员
发帖
与我相关
我的任务
分享
procedure TForm1.TS_1Execute(AContext: TIdContext);
var
s:string;
_cmd : string;
len:Integer;
begin
// len :=AContext.Connection.IOHandler.RecvBufferSize ; //这个得到的长度是0
// len :=AContext.Connection.IOHandler.InputBuffer.Size ; //这个得到的长度是32783
with AContext.Connection do begin
s := IOHandler.ReadString(116); //这个长度很让人难搞,这里不能使用 Len的值、、
// IOHandler.InputBuffer.Clear; //如果使用这个,则会间隔性的丢失数据。。即:只能收到 1.3.5.7.9 的数据 2.4.6.8.10 ...等则丢失)
MM_1.Lines.Add(FormatDateTime('hh:mm:ss.zzz'+#13#10,Now)+s) ;
_cmd := Copy(s,1,5);
if (Trim(_cmd)='beats') or (_cmd[1]='0') then begin
Socket.WriteLn(' ',enUTF8);
MM_1.Lines.Add('回复空格') ;
end;
end;
var
S , sBuf : String;
n : integer;
begin
...
S := IOHandler.ReadString(1024); //用一个足够大的
sBuf := sBuf + S;
//这里来分析sBuf,只处理并删除一个完整的内容,剩余的内容,让下一条数据补充
//比如假设一行的内容是beats,count=3768,type=10,name=TN_1e306c2b5727,machine_no=8888,
//ip=10.1.153.31,now_time=2014-06-20_17:09:02,white_name
//我假设'white_name'是行结束标记
while True do begin
n := Pos('white_name' , sBuf);
if n=0 then Break;
S := Copy(sBuf , 1 , n + Length('white_name'));
Delete(sBuf , 1 , n + Length('white_name'));
//这里S就是一行数据了
//........
end;
....
end;