以下代码在Delphi XE 10.2 Tokyo中编译通过,其中Indy版本:10.6.2
属性:
1. Active:启动服务。
IdTCPServer1.Active:=True;
2. Bindings:网卡绑定集合对象,类型为TIdSocketHandles。集合元素为网卡绑定对象。可以为idTCPServer设置多个IP与端口,同时可以指定IP的版本。
IdTCPServer1.Bindings.Add.IP:='127.0.0.1'; IdTCPServer1.Bindings.Add.Port:=3515;
3. DefaultPort:默认监听端口
在服务启动后修改监听端口,需要先清除Bindings。
IdTCPServer1.active:=false IdTCPServer1.Bindings.Clear; IdTCPServer1.DefaultPort:=8000; IdTCPServer1.Active:=true;
4. ListenQueue:允许最多监听的网络连接线程数目。依据需求和系统的承载能力来设定。
5. MaxConnections:服务端可以承载的最大的网络连接数目。如果取0,则代表没有最大限制。
6. ReuseSocket:本地地址中被重新使用的监听线程。
7. TerminateWaitTime:Active为False时, 结束所有已连接的客户端线程(PeerThread)的超时检测。如果超时, 则抛出超时异常。
事件:
1. OnConnect:客户端连接成功事件
连接成功后,就可以获取客户端的IP,端口,及本机线程ID。其中要获取线程ID,需要添加线程池控件IdSchedulerOfThreadPool。
ClientIP:=AContext.Binding.PeerIP; ClientPort:=AContext.Binding.PeerPort; ClientTHID:=TIdYarnOfThread(AContext.Yarn).Thread.ThreadID;
2. OnDisConnect:客户端断开事件
断开事只有在客户端正常断开,或服务器主动断开客户端时才会触发。客户端因为断电、死机、线路问题等异常原因断开的情况下是无法触发此事件的。所以需要使用心跳包机制。
3. OnExeCute:收到客户端数据事件
4. OnException:客户端连接异常事件