IdTcpCilent/Server编程中,AThread.Data指的是什么? 如题。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己去indy的主页下载demo看看 这个Data其实就是代表连接对方的东西,比如一个文件服务器,对话开始后,设定一个初始目录,然后接受客户的命令,客户发送cd xxx时,服务器必须记住客户在对话期间的当前目录,所以要持有一个对象或者数据结构来记录这些信息,tpeer = class ip: string; currDir: string;end;tserver = classprivate fTCPServ: TIdTCPServer; fClients: TThreadList;procedure procedure onConnect(aThread: TIdPeerThread); procedure OnDisconnect(aThread: TIdPeerThread) procedure OnCDCommand(aSender: TIdCommand);...procedure TServer.OnConnect(aThread: TIdPeerThread);var client: tpeer;begin //当连接开始时,创建客户对象 client := tpeer.create(); client.ip := ...; client.cd := default_directory; ... aThread.Data := client; //如果有必要,记录将这个对象添加到当前活动对话当中 //那么, fclientList则反映了当前活动的连接,以及各个连接的相关信息 fClients.LockList(); try fClients.add(client); finally fClients.unlocklist(); end;end;procedure TServer.OnCDCommand(aSender: TIdCommand);var client: tpeer; targetDir: string;begin //处理CD命令 //取得持有的peer对象 client := tpeer(aSender.thread.data); targetDir := MyParseParam(aSender.Params); //执行cd命令,并更新current directory client.currDir := ChangeDir(client.currDir + targetDir); MyReplyOk(aSender);end;procedure TServer.OnDisconnect(aThread: TIdPeerThread);begin //如果先前纪录了peer,现在要把它从列表中去掉 fClients.LockList(); try fClients.remove(aThread.Data); finally fClients.Unlocklist(); end; //连接断开了,这个时候要释放先前创建的peer对象 tpeer(aThread.Data).Free(); aThread.Data := nil;end;简单的用法就是这样 如何取出.eml文件中邮件的头部和正文? DEPHI中如何打开EXCEL文件后改变工作表的名并保存? [急]Delphi怎样用代码来控制SQL Server的服务启动与关闭 求WideString如何转String急急急 ADOQUERY能做主从表更新吗! 字符串问题 发布一个免费软件:Pascal源代码格式化/美化工具!千分散尽还复来,只要大家爽! 我 想自己写一个到数据库取码的组件(高手帮忙) 简单的问题 怎样检测系统有没有打印机,没有又怎么添加? 查询的高难度问题 问: 一个窗体如果正在做很多事情的话,鼠标再去操作的话窗体就就白过来,像outlook之类没有这个问题,怎么处理的?
ip: string;
currDir: string;
end;tserver = class
private
fTCPServ: TIdTCPServer;
fClients: TThreadList;
procedure
procedure onConnect(aThread: TIdPeerThread);
procedure OnDisconnect(aThread: TIdPeerThread)
procedure OnCDCommand(aSender: TIdCommand);
...procedure TServer.OnConnect(aThread: TIdPeerThread);
var
client: tpeer;
begin
//当连接开始时,创建客户对象
client := tpeer.create();
client.ip := ...;
client.cd := default_directory; ...
aThread.Data := client; //如果有必要,记录将这个对象添加到当前活动对话当中
//那么, fclientList则反映了当前活动的连接,以及各个连接的相关信息
fClients.LockList();
try
fClients.add(client);
finally
fClients.unlocklist();
end;
end;procedure TServer.OnCDCommand(aSender: TIdCommand);
var
client: tpeer;
targetDir: string;
begin
//处理CD命令 //取得持有的peer对象
client := tpeer(aSender.thread.data);
targetDir := MyParseParam(aSender.Params); //执行cd命令,并更新current directory
client.currDir := ChangeDir(client.currDir + targetDir); MyReplyOk(aSender);
end;procedure TServer.OnDisconnect(aThread: TIdPeerThread);
begin
//如果先前纪录了peer,现在要把它从列表中去掉
fClients.LockList();
try
fClients.remove(aThread.Data);
finally
fClients.Unlocklist();
end;
//连接断开了,这个时候要释放先前创建的peer对象
tpeer(aThread.Data).Free();
aThread.Data := nil;
end;简单的用法就是这样