客户端:type
TMyData=record
  id:integer;
  sName:array[0..3] of char;
end;
var
  mydata:TMydata;
begin
  mydata.sName := 'ABCD';
  IdTCPClient1.WriteBuffer(mydata,sizeof(mydata));
  Memo1.Lines.Add(mydata.sName);
  //IdTCPClient1.ReadBuffer(mydata,sizeof(mydata));
  //Memo1.Lines.Add(mydata.sName);
end;
服务端:type
TMyData=record
  id:integer;
  sName:array[0..3] of char;
end;
var
  mydata:TMydata;
begin
  mydata.sName := 'ABCD';
  IdTCPClient1.WriteBuffer(mydata,sizeof(mydata));
  Memo1.Lines.Add(mydata.sName);
  //IdTCPClient1.ReadBuffer(mydata,sizeof(mydata));
  //Memo1.Lines.Add(mydata.sName);
end;现在这样子是没问题的,可是我把注释打开,即服务端马上回信息,就有问题,服务端收不到任何内容我再改一下:type
TMyData=record
  id:integer;
  sName:array[0..3] of char;
end;
var
  mydata:TMydata;
begin
  mydata.sName := 'ABCD';
  IdTCPClient1.WriteBuffer(mydata,sizeof(mydata));
  Memo1.Lines.Add(mydata.sName);
  Sleep(5000);
  //IdTCPClient1.ReadBuffer(mydata,sizeof(mydata));
  //Memo1.Lines.Add(mydata.sName);
end;为何服务端,是在客户端Sleep(5)之后才收到内容呢?难道不能发送完就读取吗?

解决方案 »

  1.   

    procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);//在这里面读
    begin
    IdTCPClient1.ReadBuffer(mydata,sizeof(mydata)); 
    end;
      

  2.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      Len: Word;
      Msg: String;
    begin
      Len := Length(Edit1.Text);
      Msg := Edit1.Text;
      //IdTCPClient1.WriteBuffer(Len, 2);
      //Memo1.Lines.Add(IntToStr(Len));
      IdTCPClient1.WriteBuffer(Msg, Len);
      Memo1.Lines.Add(Msg);
      //IdTCPClient1.ReadBuffer(Len, 2);
      //Memo1.Lines.Add(IntToStr(Len));
      //IdTCPClient1.ReadBuffer(Msg, Len);
      //Memo1.Lines.Add(Msg);
    end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    var
      Len: Word;
      Msg: String;
    begin
      with AThread.Connection do
      begin
        //ReadBuffer(Len, 2);
        //Memo2.Lines.Add(IntToStr(Len));
        ReadBuffer(Msg, 5);
        Memo2.Lines.Add(Msg);
        //Msg := 'Echo';
        //Len := Length(Msg);
        //WriteBuffer(Len, 2);
        //Memo2.Lines.Add(IntToStr(Len));
        //WriteBuffer(Msg, Len);
        //Memo1.Lines.Add(Msg);
      end;
    end;这一对程序,客户端只能发一次,发第二次,服务端就收不到,然后就出错了,为什么啊?