比如 现在TIDTCPserver1 已经跟某2个客户端连接好了。现在我要在服务器段,添加一个按钮
在按钮里面控制TIDTCPserver1向某一个客户端发信息,客户端IP已知。
如:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
// 发信息到某一客户端。
end;
在按钮里面控制TIDTCPserver1向某一个客户端发信息,客户端IP已知。
如:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
// 发信息到某一客户端。
end;
UDP有IP和端口就可以发送,
TCP的server端必须等客户端连接上来后才能发送
类似AThread.Connection.WriteLn具体建议先看看INDY的demo,里面有个chat的例子
能写出这句,证明你再看demo,为什么不仔细研究下呢?
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.