Temat był goglowany, ale rozwiązania jak dotąd dobrego nie znalazłem i zawsze były problemy z odpowiedziami :-P
Temat jest taki że musi to być mega bezpieczne, więc zamieszcze co sklecilem, może ktoś wyłapie jakiś bład bądź nakieruje mnie na lepsze rozwiazanie.
Problem : Stoi sobie serwer, jest powiedzmy podlaczonych 10 klientow. I teraz, jak wyslac dane do odpowiedniego klienta ? Wiec pomyslalem ze zrobie tak ze przy polaczeniu klienta, wysyla swoja nazwe np : KLIENT 1, wkladam to do tablicy przypisujac uchwyt. Schody zaczely sie przy tym jak dany klient moze sie rozlaczyc i ponownie podlaczyc (zmieniajac swoje polozenie i innych w mojej tablicy).
Serwerowi sa znane ewentualne nazwy klientow, wiec wybieram z ComboBoxa jego nazwe i wysylam komunikat.
type
TSockets = record
SID : string;
Handle : Integer;
end;
var
Form1: TForm1;
Sockets : array of TSockets;
procedure TForm1.Button_WyslijClick(Sender: TObject);
var
I,J,Handle : Integer;
begin
for I := 0 to Server.Socket.ActiveConnections - 1 do
if(ComboBox1.Text = Sockets[I].SID) then
begin
Handle := Sockets[I].Handle;
break;
end;
for J := 0 to Server.Socket.ActiveConnections - 1 do
if(Server.Socket.Connections[I].SocketHandle = Handle) then
begin
Server.Socket.Connections[I].SendText('dsdsds');
break;
end;
end;
procedure TForm1.serverClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
SetLength(Sockets,Server.Socket.ActiveConnections);
end;
procedure TForm1.serverClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
I,J : Integer;
begin
for I := 0 to Server.Socket.ActiveConnections - 1 do
if(Socket.SocketHandle = Sockets[I].Handle) then
break;
for J := I+1 to Server.Socket.ActiveConnections - 1 do
begin
Sockets[J-1].SID := Sockets[J].SID;
Sockets[J-1].Handle := Sockets[J].Handle;
end;
SetLength(Sockets,Server.Socket.ActiveConnections-1);
end;
procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
s: AnsiString;
begin
SetLength(s, Socket.ReceiveLength);
SetLength(s, Socket.ReceiveBuf(Pointer(s)^, Length(s)));
Sockets[Server.Socket.ActiveConnections-1].SID := s;
Sockets[Server.Socket.ActiveConnections-1].Handle := Socket.SocketHandle;
end;