Ja, ich verstehe schon was du willst.
Ich habe ein ähnliches Problem folgendermaßen gelöst.
Delphi-Quellcode:
procedure TGUIServerWin.ClientsSocket2ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
var
aSession: tSession;
Id: string;
begin
id := Socket.RemoteAddress + ':' + IntToHex(Socket.RemotePort, 4);
DebugOut('ClientsSocketClientConnect: ' + Id);
aSession := tSession.Create(Socket, 0);
aSession.OnData := OnSessionData;
aSession.KbdOn := not kbdrestricted;
aSession.FlashReady := not bFlash;
lbClients.Items.AddObject(Id, aSession); // ich hab ne listbox genommen
end;
TSession ist eine Klasse, die ein paar Informationen zu der Verbindung hält.
Wenn jetzt eine Verbinung beendet wird kommt folgendes:
Delphi-Quellcode:
procedure TGUIServerWin.ClientsSocket2ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
i: integer;
aSession: tSession;
Id:
string;
begin
id := Socket.RemoteAddress + '
:' + IntToHex(Socket.RemotePort, 4);
try
i := lbClients.Items.IndexOf(Id);
if i >= 0
then
begin
aSession := tSession(lbClients.Items.Objects[i]);
try
lbClients.Items.Delete(i);
// löschen des Listboxeintrages
except
on E:
exception do
Debugout(E.
message);
end;
aSession.Free;
// Session objekt freigeben
end
else
DebugOut('
Socket not found in Sessionlist ' + Id);
except
on E:
Exception do
DebugOut('
EXCEPTION in ClientsSocketSessionClosed: ' + E.
Message);
end;
end;
Genause verfahre ich im OnRead und OnError - über die Id kann ich das Session Objekt holen und meine damit verbundenen Daten.
Gruss