比如 现在TIDTCPserver1 已经跟某2个客户端连接好了。现在我要在服务器段,添加一个按钮
在按钮里面控制TIDTCPserver1向某一个客户端发信息,客户端IP已知。
如:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
// 发信息到某一客户端。
end;

解决方案 »

  1.   

    这个你要先搞清楚TCP和UDP的区别
    UDP有IP和端口就可以发送,
    TCP的server端必须等客户端连接上来后才能发送
    类似AThread.Connection.WriteLn具体建议先看看INDY的demo,里面有个chat的例子
      

  2.   

    我已经连上了。而且知道IP 就是不知道怎么发。我现在只有在onexecute事件里才能发。
      

  3.   

     TIdPeerThread(List.Items[Count]).Connection.WriteLn(Msg);
      

  4.   

    TIdPeerThread(List.Items[Count]).Connection.WriteLn(Msg);这样不是可以发送数据吗?
      

  5.   


    能写出这句,证明你再看demo,为什么不仔细研究下呢?
      

  6.   

    unit Umain;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls,
      IdThreadMgr, IdThreadMgrDefault;type
      Tmain = class(TForm)
        s1: TIdTCPServer;
        Memo1: TMemo;
        Button1: TButton;
        Button2: TButton;
        IdThreadMgrDefault1: TIdThreadMgrDefault;
        procedure Button1Click(Sender: TObject);
        procedure s1Connect(AThread: TIdPeerThread);
        procedure s1Execute(AThread: TIdPeerThread);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        Clients:TList;
        { Public declarations }
      end;var
      main: Tmain;implementation{$R *.dfm}procedure Tmain.Button1Click(Sender: TObject);
    begin
    s1.Active:=true;
    end;procedure Tmain.s1Connect(AThread: TIdPeerThread);
    begin
      Clients.Add(AThread);
      memo1.Lines.Add(AThread.Connection.LocalName);end;procedure Tmain.s1Execute(AThread: TIdPeerThread);
    var buf:array[0..99]of char;
    begin
    Athread.Connection.ReadBuffer(buf,100);
    memo1.Lines.Add(buf);
    Athread.Connection.WriteBuffer(buf,100,true);
    end;procedure Tmain.Button2Click(Sender: TObject); //发不了!!!!
    var buf:array[0..99]of char;
    begin
    fillchar(buf,100,'c');
    TIdPeerThread(Clients.Items[0]).Connection.WriteBuffer(buf,100,true);
    end;end.
    客户端:
    unit Umain;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
      IdTCPClient;type
      Tmain = class(TForm)
        c1: TIdTCPClient;
        Button1: TButton;
        Button2: TButton;
        Edit1: TEdit;
        Button3: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      type a=class(tthread)
        procedure execute;override;
      end;var
      main: Tmain;
       b:a;
    implementation{$R *.dfm}
    procedure a.execute;
    var buf:array[0..99]of char;
    begin
      while true do
      begin
       if  main.c1.Connected  then
       begin
       sleep(10);
       main.c1.ReadBuffer  (buf, 100);
       main.memo1.Lines.Add(buf);
       end;
      end;
    end;procedure Tmain.Button1Click(Sender: TObject);
    begin
    c1.Connect(1000);
    b:=a.create(false);
    end;procedure Tmain.Button2Click(Sender: TObject);
    var buf:array[0..99]of char;
    begin
    fillchar(buf,100,'a');
    c1.WriteBuffer (buf, 100, true);
    //c1.Write(edit1.text);end;procedure Tmain.Button3Click(Sender: TObject);
    var buf:array[0..99]of char;
    begin
       c1.ReadBuffer  (buf, 100);
       memo1.Lines.Add(buf);
    end;end.
      

  7.   

    你再看看demo里面 Clients.Add(Client);之前还有什么代码,呵呵