type
  rec=record
  username,
  msg:string;
{ thread }
end;
type
  thread=class(tthread)
private
  procedure handleinput;
public
  procedure execute;override;
end;var
  Form1: TForm1;implementation{$R *.dfm}
var
  passthread:thread;
  frm:tform1;
  rec1,
  rec2:rec;procedure TForm1.Button1Click(Sender: TObject);
begin
  if tcpclient.Connected then
  else
  begin
    tcpclient.Port:=strtoint(tbserport.text);
    tcpclient.Host:=tbsername.Text;
    tcpclient.Connect();
    tcpserver.Active:=true;
  end;
  passthread:=thread.Create(true);
  passthread.FreeOnTerminate:=true;
  passthread.Resume;
end;procedure TForm1.tcpclientConnected(Sender: TObject);
begin
  showmessage('connected');
end;{ thread }procedure thread.execute;
begin
//  inherited;
  frm.Memo1.Text:=frm.Memo1.Text +'welcome';
end;procedure thread.handleinput;
begin
  showmessage('handle run');
  passthread.Synchronize(handleinput);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  frm:=self;
end;
procedure TForm1.tcpserverExecute(AThread: TIdPeerThread);
begin
  if not athread.Terminated  and athread.Connection.Connected  then
  begin
    athread.Connection.ReadBuffer(rec2,sizeof(rec1));
    memo1.Lines.Add(rec2.username+':'+rec2.msg);
  end;
end;procedure TForm1.btnsendClick(Sender: TObject);
begin
  rec1.username:='pc1';
  rec1.msg:=memo2.Text;
  tcpclient.WriteBuffer(rec1,sizeof(rec1),true);end;
end.另外:
Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    tbsername: TEdit;
    tbserport: TEdit;
    tbcliport: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    btnsend: TButton;
    tcpclient: TIdTCPClient;
    tcpserver: TIdTCPServer;连接就可以,但是就不能发信息,不知错在那里啦

解决方案 »

  1.   

    请使用IdTCPServer的IdCommandHandlers功能,请参考一下我的程序
    procedure TLocalTreeForm.IdTCPServer1TIdCommandHandler0Command(
      ASender: TIdCommand);
    var
      i,parentID,Classify:Integer;
      title:String;
    begin
      DBForm.ADOTable2.Open;
      with DBForm.ADOTable2 do
        begin
          Refresh;
          First;
          ASender.Thread.Connection.WriteInteger(RecordCount);
          for i:=0 to RecordCount-1 do
            begin
    //          Id:=FieldByName('ID').AsInteger;
              title:=FieldByName('title').AsString;
              parentID:=FieldByName('parentID').AsInteger;
              Classify:=FieldByName('Classify').AsInteger;
              with ASender.Thread.Connection do
                begin
                  WriteLn(title);
                  WriteInteger(parentID);
                  WriteInteger(Classify);
                end;
              next;
            end;    //end for
        end;
      DBForm.ADOTable2.Close;
    end;
      

  2.   

    还是不行,我跟踪了一下程序,当连接的时候,只有TCPclient在响应。tcpserver就没有响应