前几年在博客看到有人写过类似的例子,但是都忘记了,无奈最近由于项目需要用到
所以又重新研究了一下TIdTCPServer和TIdTCPClient控件
以前有写过Indy 10发送数据的例子,
不懂的朋友可以在这里下载:
https://download.csdn.net/download/zhou752947/10213169
使用的是Delphi 10.2.2,但是最近我用Delphi10.4.2编译后发现传输文件有问题,其他都正常,有时间的朋友自己研究去吧
进入正题:
IDE工具:Delphi 10.4.2
Indy版本:10.6.5
至于多线程,官方文档就有说明,其实TIdTCPServer运行过程中,当客户端连接成功后默认就是基于TIdSchedulerOfThreadDefault调度分配线程模式,为每个客户端连接都分配单独的处理线程,由于Windows线程的限制,Indy 似乎还有一种特殊的模式TIdYarnOfThread来代替传统线程,至于TIdYarnOfThread这里不做研究,开始上代码
1.启动按钮事件
IdTCPServer1.DefaultPort:= 8000;
IdTCPServer1.ListenQueue:= 1024; //同时处理请求队列数限制
IdTCPServer1.MaxConnections:= 1024; //同时连接数量限制,为0不限制连接数
IdTCPServer1.ContextClass:= TNewIdServerContext; //设置为自定义TIdServerContext类,作用稍后说明
TIdServerContext.Active:= True; //启动监听
2.自定义TIdServerContext类
定义这个类的好处就是用于保存用户的个人数据等等
unit uNewIdServerContext;
interface
uses Winapi.Windows, IdCustomTCPServer, IdTCPConnection, IdYarn, IdContext;
type
TNewIdServerContext = class(TIdServerContext)
public
constructor Create(AConnection: TIdTCPConnection