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 :
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 :
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 :
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):
1 2
| ClientData.UserName := ed_User.Text;
Socket.Data := ClientData; |
pour le récupérer ensuite (coté serveur):
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.
Partager