各位大大,小弟在使用Tidtcpserver发送数据时遇到一下问题://接收数据
procedure TForm1.idtcpserver1Execute(AThread: TIdPeerThread);
var
  B : Byte;
begin
  B := $0f;
  AThread.Connection.WriteBuffer(B,1);
  B := $00;
  AThread.Connection.WriteBuffer(B,1);
end;//按钮事件
procedure TForm1.btn4Click(Sender: TObject);
var
  B : Byte;
begin
  B := $05;
  AThread.Connection.WriteBuffer(B,1);
end;在tcpserver进行数据通信时候点击BTN4按钮发送$05,
使用Ethereal抓包得到以下数据
“0f 00 05” 在同一个包当中如何才能使这三次发送分别为三个不同的包呢?

解决方案 »

  1.   

    接收的时候用 ReadBuffer(b,1);
      

  2.   

    procedure TForm1.btn4Click(Sender: TObject);
    var
      B : Byte;
    begin
      B := $05;
      AThread.Connection.WriteBuffer(B,1);
    end;你这里的Athread是哪里来的,只要记住怎么发的就怎么读就可以了
      

  3.   


    这里打错了,应该是:
    var
      LThreads : TList;
    begin  
    LThreads := idtcpserver1.Threads.LockList;
      try
        TIdPeerThread(LThreads[0]).Connection.WriteBuffer(Buff,1);
      finally
        idtcpserver1.Threads.UnlockList;
      end;
    end;昨天下午调试的时候又可以正常的发送了,不知道为什么,可能是由某个代码段的发送指令引起的。现在在做一个网络语音设备的上位机程序,对网络这部分不是很熟习。
    一直存在一个问题:
    就是使用tcpserver的ReadBuffer读取数据,但是设备发来的数据不是固定长度的,我需要读取第一个字节判断数据长度,但是readbuffer读完之后就会把buff中的数据删除了,有没有什么好的方法可以读取不固定长度的数据呢?