2010-08-16 64 views
1

我有一個使用TipwIPDaemon組件構建的服務器應用程序。當客戶端連接連接事件與發射的ConnectionId連接的維護ipWorks的connectionid列表TipwIPDaemon組件

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的任何內部列表?或者我必須自己維護它?比方說,我想將數據發送給所有連接的客戶端。我似乎需要一個連接id的「列表」:

for i:=0 to ipd.connectioncount-1 do begin 
    IPD.DataToSend[GetConnectionID(i)] := 'Hello There'; 
    ...... 

回答

1

一種方式做,這是使用連接和斷開事件。基本上你會維護你自己的當前連接ID列表。當Connected事件觸發時,您會將ID添加到您的列表中。當Disconnected事件觸發時,您會從列表中刪除該ID。

+0

謝謝。所以你需要自己管理清單。我正在從Indy移植它。通過Indy,您可以通過tcpserver.Contexts遍歷所有打開的連接。 IPWorks TipwIPDaemon組件無法在內部維護此列表的原因是否有任何原因? – 2010-08-17 02:32:37

+0

它確實以不同的方式維護這個列表。查看我對這個問題的回答 - 只需使用每個連接的Connected屬性來確定它是否仍然有效。 – 2010-08-17 12:41:21

0

你可以檢查每個連接的狀態嗎?例如,你應該能夠做這樣的事情:

for i:=0 to ipd.connectioncount-1 do 
begin 
    if (ipd.Connected[i]) then 
    begin 
    ipd.DataToSend[i] := 'Hello There'; 
    ... 
    end; 
end;