Bonjour à tous,![]()
Je voudrais savoir comment on fait pour pouvoir envoyer une variable typée avec TServeurSocket et TClientSocket ...![]()
Merci d'avance,![]()
Bonjour à tous,![]()
Je voudrais savoir comment on fait pour pouvoir envoyer une variable typée avec TServeurSocket et TClientSocket ...![]()
Merci d'avance,![]()
Qu'est-ce que tu entends par "une variable typée"
Une variable qui a un type qu'on a créé nous-même ...
Ben, je vois pas ce qui te gêne. Il suffit jsute que ton récepteur connaisse le type.
Non, il a raison, ce n'est pas si évident quand on a pas l'habitude...
Dis moi, t'est tu déjà familiarisé avec le fonctionnement des Stream (TMemoryStreanm, TFileStream), en particulier leurs méthodes Write et Read, ou avec la fonction getmem par exemple ?
Sinon, j'imagine que tu as réussi à envoyer du texte avec SendText, exact ?
Envoyé par Matt2094
Je m'en doutais...
Bon, on commence par le début : as tu trouvé les procédure SendBuf et ReceiveBuf dans tes composants TServerSocket et TClientSocket ?
As tu réussis à envoyer du texte avec SendText et ReceiveText (déjà, avoir commencé par ça, c'est un bon début, sinon on est mal barré)
J'ai déjà réussi à envoyer du texte ...
Par contre, j'ai pas trouver ces deux fonctions ...![]()
Donc, en admettant que tu aies suivi le tuto là :
http://delphipage.free.fr/sockets.html
Tu as du utiliser ce code :
Pour envoyer des données, n'importe lesquelles (par exemple un Integer, un TPoint, un type enregistrement (Record) de ton crû, un tableau), il te faut utiliser la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TForm1.Button3Click(Sender: TObject); begin ClientSocket1.Socket.SendText(Edit4.Text); Memo1.Lines.Add('Informations envoyées au serveur'); end;
A la place de Buf : tu mets ta variable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ClientSocket1.Socket.SendBuft(var Buf;Count:Integer);
A la place de Count : tu mets sa taille en octets
Admettons que je veuille envoyer un Integer (i par exemple) :
- Il me faut sa taille, qui m'est donnée par : SizeOf(Integer)
- Et j'écris :
De la même manière, pour envoyer un boolean :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure TForm1.Button3Click(Sender: TObject); var i:Integer; begin i:=2006; ClientSocket1.Socket.SendBuf(i,SizeOf(Integer)); Memo1.Lines.Add('Informations envoyées au serveur'); end;
Un TPoint :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var b:Boolean; ... b:=true; ClientSocket1.Socket.SendBuf(b,SizeOf(boolean));
Un tableau d'entiers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 var MonPoint:TPoint; ... MonPoint.x:=50; MonPoint.y:=30; ClientSocket1.Socket.SendBuf(MonPoint,SizeOf(TPoint));
Un record de ton crû
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 type TMonTableau=array[0..50] of integer; var MonTableau:TMonTableau; ... ClientSocket1.Socket.SendBuf(MonTableau,SizeOf(TMonTableau));:
Là il faut faire attention, si ton enregistrement contient des strings (ça aurait été TROP simple sinon), il faut que tu leur donne une longueur bien définie, exemple :
Ensuite, c'est comme le reste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 type TJoueur=record Pseudonyme:string[50]; //<-- là ! Vies:integer; CaseChoisie:TPoint; end;
[/code]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 var UnJoueur:TJoueur; ... ClientSocket1.Socket.SendBuf(UnJoueur,SizeOf(TJoueur));
Pour recevoir les données, c'est ReceiveBuf(), dans lequel tu indiques :
- la variable à remplir pour récupéerer les données.
- la longueur des données à recevoir.
Tu suis là ? Tu me dis quand je peux passer à la suite...
J'ai tout compris! merci beaucoup!
P.S : c'était pas la peine de faire plus d'une page ... lol
Oui, mais au moins tu as compris, si j'en avais mis franchement moins, ne te connaissant pas, tu n'aurais peut-être pas tout compris. Tout le monde ne pige pas aussi vite que toi
Celà dit, c'est tout simple quand tu envoies toujours le même type de données, le serveur, ou le client qui reçoit SAIT à qui s'attendre.
Mais imagine que parfois tu es besoin d'envoyer Un TPoint, et parfois un TJoueur, à la réception ton programme doit d'abord être informé de ce qui l'attend. Vois tu ce que je veux dire ?![]()
Oui, bha il suffit d'envoyer un premier méssage qui éxplique le type de données qui va être envoyée ...
ExactEnvoyé par Matt2094
En admettant que tu sois en mode bloquant
Parce que sinon, qui te dis, en mode non bloquant, que le paquet de données ne va pas arriver avant l'info "type de données"![]()
Bon, on va dire que si j'ai un problème, je poste un message ...![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager