代码如下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer, IdThread;type
TForm1 = class(TForm)
mmo1: TMemo;
idtcpsrvr1: TIdTCPServer;
btn1: TButton;
btn2: TButton;
edt1: TEdit;
procedure btn1Click(Sender: TObject);
procedure idtcpsrvr1Execute(AThread: TIdPeerThread);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
FThread : TIdPeerThread;implementation{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
begin
idtcpsrvr1.Active := True;
end;procedure TForm1.idtcpsrvr1Execute(AThread: TIdPeerThread);
var
str: string;
begin
try
AThread.Connection.CheckForDisconnect(True,True);
str:= AThread.Connection.ReadLn();
mmo1.Lines.Add(str);
if str<>'' then
AThread.Connection.WriteLn('服务器已经相应你的消息'+str);
finally end;
end;procedure TForm1.btn2Click(Sender: TObject);
var
// cList: TList;
count: Integer;
str: string;
begin
str:= edt1.Text;
try
//cList := idtcpsrvr1.Threads.LockList;
// for count := 0 to cList.Count-1 do
// begin
FThread.Connection.Write(str); //每次程序执行到这里都报错。应该怎么写才可以???
finally
// idtcpsrvr1.Threads.UnlockList;
end;end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer, IdThread;type
TForm1 = class(TForm)
mmo1: TMemo;
idtcpsrvr1: TIdTCPServer;
btn1: TButton;
btn2: TButton;
edt1: TEdit;
procedure btn1Click(Sender: TObject);
procedure idtcpsrvr1Execute(AThread: TIdPeerThread);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
FThread : TIdPeerThread;implementation{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
begin
idtcpsrvr1.Active := True;
end;procedure TForm1.idtcpsrvr1Execute(AThread: TIdPeerThread);
var
str: string;
begin
try
AThread.Connection.CheckForDisconnect(True,True);
str:= AThread.Connection.ReadLn();
mmo1.Lines.Add(str);
if str<>'' then
AThread.Connection.WriteLn('服务器已经相应你的消息'+str);
finally end;
end;procedure TForm1.btn2Click(Sender: TObject);
var
// cList: TList;
count: Integer;
str: string;
begin
str:= edt1.Text;
try
//cList := idtcpsrvr1.Threads.LockList;
// for count := 0 to cList.Count-1 do
// begin
FThread.Connection.Write(str); //每次程序执行到这里都报错。应该怎么写才可以???
finally
// idtcpsrvr1.Threads.UnlockList;
end;end;end.
解决方案 »
- 帮我修改一段代码
- 汉字转换成 #号+五位整数 的编码是什么算法规则?
- 各位大哥,请问一个关于报表的奇怪的问题,非常紧急,在线等。
- DBEdit里面怎么不允许用键盘输入数据呀。急。
- 请问在Delphi里面怎么在指定目录下动态的生成一个任意扩展名的文件?
- 请问高手!!
- 高手请进?(关于动态赋值)
- Delphi里多线程里面怎么进行通信?
- mydata.ClientDataSet2.Locate('name',edit1.Text,[loPartialKey])的问题
- 如何把opendialog和savedialog的选定路径付给copyfile函数的scrfile和objfile?
- 下午就放假了,提前祝大家新年快乐!
- 程序与CPU和内存
那为什么在idtcpsrvr1Execute(AThread: TIdPeerThread); 这个事件里可以直接用呢?
idtcpsrvr1Execute(AThread: TIdPeerThread); 这里可以用是TIdTCPServer在初始化的时候就已经创建了1个TIdPeerThread对象。也就是说这里AThread引用的对象VCL已经给你创建了。FThread在你用之前实例化下就可以了
FThread :=TIdPeerThread.create();
var
cList: TList;
count: Integer;
str: string;
begin
str:= edt1.Text;
try
cList := idtcpsrvr1.Threads.LockList;
for count := 0 to cList.Count-1 do
begin
FThread := cList[count];//關鍵...
FThread.Connection.Write(str);
end;
finally
idtcpsrvr1.Threads.UnlockList;
end; end;
非常感谢OnlyYou这位朋友