用indy控件如何在delphi网络编程中控制多各客户端 各位大侠帮忙,indy如何在delphi网络编程中控制多各客户端,当有多个客户端相连时,如何得到多个客户端ip,如何更据客户端的不同由服务器发送命令,再此过程中所有的客户端都要保持连接状态(我编的是一个网络抄表系统测试程序,客户端为多个采集器)?,如果有高手能用其他控件做到也可以,谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 TIdTCPServer 等的 Indy 服务控件都是多线程的。每个客户端 Connect 上来知道,都再服务端触发 OnConnect 事件,并产生一个线程对象(TThread 的继承类 TIdPeerThread)。如下面代码就可以得到客户端的 IP 地址。procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);begin ShowMessage(AThread.Connection.Socket.Binding.PeerIP);end;每个 TIdTCPServer 会通过 Threads 属性维护一个 TThreadList,可以通过如下代码给每个客户端发送数据。(可以通过客户的 IP、Port 进行直接区分,或用 Data 属性)procedure TForm1.Button1Click(Sender: TObject);var Index: Integer; Threads: TList;begin Threads := IdTCPServer1.Threads.LockList; for Index := 0 to Threads.Count - 1 do begin TIdPeerThread(Threads.Items[Index]).Connection.WriteLn('Send To ' + IntToStr(Index)); end; IdTCPServer1.Threads.UnlockList;end;要维持每个客户的连接,则必须定期发送数据来保持连接(如 3 分钟),可以从客户端发起也可以从服务端发起。由于 Indy 的客户端采用阻塞方式设计的,所最好采用客户端主动的应答方式进行编程。 Gif 图 导出问题;为嘛 会变颜色啊~ 怎么在关闭登录窗口的同时打开主窗口? 控件StringGrid的用法 请问如何实现鼠标特定数目的连击事件~~谢谢! 删除记录的问题 [求助]mdi窗口与菜单的问题 开发一个小型工具,费用协商。 TStringGrid的问题。 为什么收不到自己发送的消息? 请问斑竹这儿有没有帖子的收藏功能, 班主请进,关于ado多表更新问题。 急.................. 如何解决使用quickreport3.5时出现的打不到文件designlntf.dcu问题! d7中! 十万火急
如下面代码就可以得到客户端的 IP 地址。
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
ShowMessage(AThread.Connection.Socket.Binding.PeerIP);
end;每个 TIdTCPServer 会通过 Threads 属性维护一个 TThreadList,可以通过如下代码给每个客户端发送数据。(可以通过客户的 IP、Port 进行直接区分,或用 Data 属性)
procedure TForm1.Button1Click(Sender: TObject);
var
Index: Integer;
Threads: TList;
begin
Threads := IdTCPServer1.Threads.LockList;
for Index := 0 to Threads.Count - 1 do
begin
TIdPeerThread(Threads.Items[Index]).Connection.WriteLn('Send To ' + IntToStr(Index));
end;
IdTCPServer1.Threads.UnlockList;
end;要维持每个客户的连接,则必须定期发送数据来保持连接(如 3 分钟),可以从客户端发起也可以从服务端发起。
由于 Indy 的客户端采用阻塞方式设计的,所最好采用客户端主动的应答方式进行编程。