Bonjour

je voulais redonner vie à une vieille application de gestion d'une fille d'attente. c'est une application C/S communicant avec des sockets. Afin d'identifier chaque client j'ai rajouté le type ClientData :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
  type
    PClientData = ^TClientData;
    TClientData = record
      UserName: string;
  end;
Coté client : dans l’événement OnConnect du ClientSocket j'ai rajouté le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure Tfm_Show.Client_ShowConnect(Sender: TObject; Socket: TCustomWinSocket);
var
  ClientData: PClientData;
begin
  if ed_User.Text <> '' then
  begin
    GetMem(ClientData, SizeOf(PClientData));
    New(ClientData);
    ClientData.UserName := ed_User.Text;
    Socket.Data := ClientData;
    bt_Stop.Enabled := (Client_Show.Active = True);
    // La connection est réussie
    MemoShow.Lines.Add('POSTE ' + Socket.RemoteAddress+ ' connecté');
  end
  else MemoShow.Lines.Add('Renseigner le nom d''utilisateur et recommencer.');
end;

Coté serveur : dans l’événement OnClientConnet du ServertSocket j'ai rajouté le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure Tfm_Serveur.ServeurClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  I: Integer;
  NewColumn: TListColumn;
  ListItem: TListItem;
begin
  MemoServeur.Lines.Add('POSTE ' +
    Socket.RemoteAddress + ' connecté à '+ TimeToStr(now));

  with lv_POSTE do
  begin
    ViewStyle := vsIcon;
    NewColumn := Columns.Add;
    NewColumn.Caption := 'POSTE';
    ListItem := Items.Add;
    ListItem.ImageIndex := 55;
    ShowMessage(TClientData(Socket.Data).UserName);
    ListItem.Caption := TClientData(Socket.Data).UserName //chaine vide !!!
  end;

end;
comme vous le voyez si bien, je commence par stocker mon user (coté client):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 ClientData.UserName := ed_User.Text;
    Socket.Data := ClientData;
pour le récupérer ensuite (coté serveur):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ListItem.Caption := TClientData(Socket.Data).UserName
Le problème c'est que j'ai toujours une chaîne vide dans le caption bien que, en débuguant pas à pas, le coté client renseigne le Data du socket (Socket.Data).

Après deux jours de recherche je sèche toujours !

Merci aux âmes charitables de m'éclairer sur mon erreur.