Каков правильный способ идентификации клиентов, если у них одинаковые IP-адреса и порты? Если они подключены только через LAN, например. ip: 198.162.1.1 port: 2015. Как определить, какой клиент отключился, используя свой уникальный идентификатор, если он имеет один и тот же IP-адрес?Как отличить соединения от нескольких клиентов с тем же IP-адресом?
TClient = class(TIdServerContext)
private
public
PeerIP : String;
procedure SendMessage(cIP, mStr : String);
end;
procedure TClient.SendMessage(cIP, mStr : String);
var
Context: TClient;
List: TList;
I: Integer;
begin
List := Form1.IdTCPServer1.Contexts.LockList;
try
for I := 0 to List.Count-1 do
begin
Context := TClient(List[I]);
if (Context.PeerIP = cIP) then
begin
Connection.IOHandler.WriteLn(mStr);
Break;
end
end;
finally
Form1.IdTCPServer1.Contexts.UnlockList;
end;
end;
Я только сохраняю IP-адрес клиента и использую его как идентификатор.
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
begin
with TClient(AContext) do
begin
if AContext.Connection.Connected then
begin
PeerIP := Connection.Socket.Binding.PeerIP;
end;
end;
end;
ClientID := Connection.Socket.Binding.Handle;
Может быть, как
procedure TForm1.IdTCPServer1Disconnect(AContext: TIdContext);
begin
//Connection.Socket.Binding.Handle; ??
end;