这是客户端的
implementation{$R *.dfm}procedure Tfrm_Client.btn_connectClick(Sender: TObject);
begin
  if idtcpclnt1 = nil then exit;
  if not idtcpclnt1.Connected then
  begin
    try
      idtcpclnt1.Host := idpwtch1.LocalIP;
      idtcpclnt1.Port := 1119;
      idtcpclnt1.Connect;
    except
      ShowMessage('connection failed');
      idtcpclnt1.Disconnect;
      exit
    end;  end;
end;procedure Tfrm_Client.btn_sendClick(Sender: TObject);
var
  S: string;
begin
  S := edt1.Text;
  idtcpclnt1.IOHandler.Write(S);
end;这是服务端的
implementation{$R *.dfm}procedure TFrm_Server.btn_OpenServerClick(Sender: TObject);
begin
  idtcpsrvr1.Bindings.Add;
  idtcpsrvr1.Bindings.Items[0].Port := 1119;
  idtcpsrvr1.Bindings.Items[0].IP := idpwtch1.LocalIP;
  idtcpsrvr1.Active := True;
end;procedure TFrm_Server.idtcpsrvr1Execute(AContext: TIdContext);
var
  s: TStringList;
begin
  S := TStringList.Create;
  AContext.Connection.IOHandler.ReadStrings(s);
  mmo1.Lines.Add(S.Text);
end;end.能连上 但是不显示啊 棒啊我搞搞啊

解决方案 »

  1.   

    发送时: idtcpclnt1.IOHandler.Write(S, IndyTextEncoding_UTF8);  //指定编码防乱码。
    接收时需要指定接收行数,这个行数需要加在数据前头传递。接收1行时:  AContext.Connection.IOHandler.ReadStrings(S,1, IndyTextEncoding_UTF8);
    收发也可以用WriteLn和ReadLn,不用考虑行数问题。另外,字符串列表需要释放,否则内存泄漏。
      

  2.   

    thank you 怎么给多个客户端发送呢,我在做一个双人对战的五子棋
      

  3.   

    thank you 怎么给多个客户端发送呢,我在做一个双人对战的五子棋
    服务端可以连接多个客户端,相互之间通过服务器通信。Indy10demo\Chat 2.0里有多客户端的聊天实例。Indy9里也有Chat例子,稍微有区别,也可以参考。