我有一个使用TipwIPDaemon组件构建的服务器应用程序。当客户端连接时,连接事件会被连接的 connectionid 触发:
procedure TServLogic.IPDaemon1Connected(Sender: TObject;
ConnectionId, StatusCode: Integer; const Description: String);
文档说明 TipwIPDaemon.connectioncount 属性返回连接数。
我的印象如下:
for i:=0 to ipd.connectioncount-1 do begin
remotehost := ipd.remotehost[i]
......
但是,我现在发现情况并非如此,对于诸如 ipd.remotehost [x] 之类的调用,下标 x 表示唯一的connectionid。
所以例如说我得到了我的第一个连接。根据我的了解,这始终是connectionid = 1。如果第二个连接进入,之后第一个连接被删除,第二个连接的引用仍然是 ipd.remotehosts [2]
我的问题:是否有与 conectioncount 对应的连接ID的内部列表?或者我必须自己维护吗?比方说,我想将数据发送到所有连接的客户端。我似乎需要一个connectionid的“列表”:
for i:=0 to ipd.connectioncount-1 do begin
IPD.DataToSend[GetConnectionID(i)] := 'Hello There';
......
答案 0 :(得分:1)
执行此操作的一种方法是使用已连接和已断开连接的事件。基本上,您将维护自己的当前连接ID列表。当Connected事件触发时,您将ID添加到列表中。当Disconnected事件触发时,您将从列表中删除该ID。
答案 1 :(得分:0)
您是否可以检查每个连接的状态?例如,您应该可以执行以下操作:
for i:=0 to ipd.connectioncount-1 do
begin
if (ipd.Connected[i]) then
begin
ipd.DataToSend[i] := 'Hello There';
...
end;
end;