Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Transmissions réseau

17 réponses
Avatar
Bloutiouf
Bonjour,

Je ne sais pas si je suis sur le bon groupe, mais je n'en trouve pas de
plus adaptés que celui-ci. Je développe une petite application réseau
(un serveur, chaque client se connecte dessus) mais j'ai un doute.

Globalement, ce sont des chaines qui sont envoyées par socket et mises
dans un buffer. Ces chaines contiennent logiquement une commande et tous
les paramètres. J'ai fait un premier jet de mon travail, en séparant les
commandes par Â, les paramètres par Ê, etc. m'étant dit qu'en langue, on
ne met pas d'accent sur des majuscules donc qu'on utiliserait pas ces
caractères, au passage que j'interdis (je les transforme en A, E, etc).
Ca marche bien, les commandes sont donc du genre
"loginÊmyloginÊmypasswordÂ" (le  est à la fin pour vérifier qu'on a
bien dans le buffer la totalité de la commande).

Seulement, je me dis que c'est pas très professionnel, et qu'il devrait
bien exister des solutions (quant à ces  et tout). Les recherches sur
google ne sont capables que de me dire comment sont connectés les clients...

Je m'adresse à toute personne ayant déjà fait une telle application,
évidemment celles qui ont des idées aussi :p , pour me dire comment
elles ont fait / auraient fait. Merci beaucoup.

Cordialement.

10 réponses

1 2
Avatar
Bloutiouf
Le problème étant que je ne connais pas à l'avance la commande, vu
qu'elle se situe dans la chaine envoyée. Le serveur ne peut pas deviner
a l'avance que tel joueur va faire telle action par exemple.

Cela dit, pour chaque commande, les paramètres sont fixés, par exemple
pour le login de l'exemple, c'est toujours suivi du login et du password.

BOUCNIAUX Benjamin wrote:
Je vais dire ca comme ca, mais ne pourrais tu pas 'structurer' tes
commandes (en gros définir ce qu'elles vont contenir, de manière à
pouvoir les typer).
Ensuite, tu les envoies sur le réseau, tu les receptionnes dans un buffer
ayant la meme structure, et tu peux ensuite récupérer les champs
nécessaires.
Cela dit, il faudrait que tu connaisses le format de tes commandes, le
nombre d'arguments à passer, etc etc...



Avatar
Marc Boyer
Le 08-03-2006, Bloutiouf a écrit :
Bonjour,

Je ne sais pas si je suis sur le bon groupe, mais je n'en trouve pas de
plus adaptés que celui-ci. Je développe une petite application réseau
(un serveur, chaque client se connecte dessus) mais j'ai un doute.

Globalement, ce sont des chaines qui sont envoyées par socket et mises
dans un buffer. Ces chaines contiennent logiquement une commande et tous
les paramètres. J'ai fait un premier jet de mon travail, en séparant les
commandes par Â, les paramètres par Ê, etc. m'étant dit qu'en langue, on
ne met pas d'accent sur des majuscules donc qu'on utiliserait pas ces
caractères, au passage que j'interdis (je les transforme en A, E, etc).
Ca marche bien, les commandes sont donc du genre
"loginÊmyloginÊmypasswordÂ" (le  est à la fin pour vérifier qu'on a
bien dans le buffer la totalité de la commande).


Et si tu utilisais la bonne vieille convention des shells:
séparateur ' ', et conversion ' ' -> " ", '' -> "".

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exiter des sots
IF -- Rudyard Kipling (Trad. Paul Éluard)

Avatar
BOUCNIAUX Benjamin
Le Wed, 08 Mar 2006 14:44:21 +0100, Bloutiouf a écrit :

Bonjour,



Bonjour,

Je ne sais pas si je suis sur le bon groupe, mais je n'en trouve pas de
plus adaptés que celui-ci. Je développe une petite application réseau
(un serveur, chaque client se connecte dessus) mais j'ai un doute.

Globalement, ce sont des chaines qui sont envoyées par socket et mises
dans un buffer. Ces chaines contiennent logiquement une commande et tous
les paramètres. J'ai fait un premier jet de mon travail, en séparant les
commandes par Â, les paramètres par Ê, etc. m'étant dit qu'en langue, on
ne met pas d'accent sur des majuscules donc qu'on utiliserait pas ces
caractères, au passage que j'interdis (je les transforme en A, E, etc).
Ca marche bien, les commandes sont donc du genre
"loginÊmyloginÊmypasswordÂ" (le  est à la fin pour vérifier qu'on a
bien dans le buffer la totalité de la commande).

Seulement, je me dis que c'est pas très professionnel, et qu'il devrait
bien exister des solutions (quant à ces  et tout). Les recherches sur
google ne sont capables que de me dire comment sont connectés les clients...

Je m'adresse à toute personne ayant déjà fait une telle application,
évidemment celles qui ont des idées aussi :p , pour me dire comment
elles ont fait / auraient fait. Merci beaucoup.

Cordialement.


Je vais dire ca comme ca, mais ne pourrais tu pas 'structurer' tes
commandes (en gros définir ce qu'elles vont contenir, de manière à
pouvoir les typer).
Ensuite, tu les envoies sur le réseau, tu les receptionnes dans un buffer
ayant la meme structure, et tu peux ensuite récupérer les champs
nécessaires.
Cela dit, il faudrait que tu connaisses le format de tes commandes, le
nombre d'arguments à passer, etc etc...

Avatar
Bloutiouf
Hm... A la rigueur, je pense que mon bidouillage serait plus facile à
mettre en place que cette convention, d'autant plus qu'elle prend un peu
plus de place (eh oui réseau oblige... enfin c'est rien trois octets de
plus). On veut le 3eme paramètre : on cherche 3 fois le caractère Ê et
on recupère la chaine jusqu'au prochain, tandis que là il faut vérifier
si le caractère n'est pas précédé d'un mais qu'il peut en être précédé
de deux...

Marc Boyer wrote:
Et si tu utilisais la bonne vieille convention des shells:
séparateur ' ', et conversion ' ' -> " ", '' -> "".

Marc Boyer


Avatar
François-Xavier GENDRIN
Le problème étant que je ne connais pas à l'avance la commande, vu
qu'elle se situe dans la chaine envoyée. Le serveur ne peut pas deviner
a l'avance que tel joueur va faire telle action par exemple.

Cela dit, pour chaque commande, les paramètres sont fixés, par exemple
pour le login de l'exemple, c'est toujours suivi du login et du password.


Pourquoi ne pas faire du XML ? Quitte à faire du texte ...
--
FX

Avatar
Marc Boyer
Le 08-03-2006, Bloutiouf a écrit :
Hm... A la rigueur, je pense que mon bidouillage serait plus facile à
mettre en place que cette convention, d'autant plus qu'elle prend un peu
plus de place (eh oui réseau oblige... enfin c'est rien trois octets de
plus).


Tu peux faire une compression si tu veux, mais de nos jours,
à moins d'un cadre très précis, il me semble pas que l'overhead
soit vraiment pénalisant.

On veut le 3eme paramètre : on cherche 3 fois le caractère Ê et
on recupère la chaine jusqu'au prochain, tandis que là il faut vérifier
si le caractère n'est pas précédé d'un mais qu'il peut en être précédé
de deux...


Non, sur fclc++, on met le tout à la réception dans un
std::vector<string> (ou std::dequeu<string>), et on fait un
accès par at ou [].
Il ne faut pas confondre le format de transfer réseau
et le format de manipulation.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exiter des sots
IF -- Rudyard Kipling (Trad. Paul Éluard)

Avatar
Bloutiouf
Oula ! Surcharge surcharge ;) c'est vrai que ca serait une bonne
solution, s'il ne fallait pas réduire presque au maximum la taille de la
chaine (ca occupe de la bande passante tout ca).

François-Xavier GENDRIN wrote:
Pourquoi ne pas faire du XML ? Quitte à faire du texte ...


Avatar
Bloutiouf
Autrement dit, en reprenant l'exemple, la chaine contiendrait "'login'
'mylogin' 'mypassword'" et le vector contiendrait les chaines "login",
"mylogin" et "mypassword" ? Ca peut être interessant ! Y a t il une
fonction déjà toute faite pour rapidement ajouter des '' ?

Marc Boyer wrote:
Non, sur fclc++, on met le tout à la réception dans un
std::vector<string> (ou std::dequeu<string>), et on fait un
accès par at ou [].
Il ne faut pas confondre le format de transfer réseau
et le format de manipulation.

Marc Boyer


Avatar
Marc Boyer
Le 08-03-2006, Bloutiouf a écrit :
Autrement dit, en reprenant l'exemple, la chaine contiendrait "'login'
'mylogin' 'mypassword'" et le vector contiendrait les chaines "login",
"mylogin" et "mypassword" ? Ca peut être interessant ! Y a t il une
fonction déjà toute faite pour rapidement ajouter des '' ?


Je ne sais pas comment t'arrive les commandes, et je ne sais pas
si tu as autre chose à faire que de les transmettre.
Mais c'était en effet mon idée.

Quand à la 'fonction toute faite', non, je ne sais pas.
Peut-etre un usage détourne de accumulate. Sinon, une
bête boucle, une string et +=.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exiter des sots
IF -- Rudyard Kipling (Trad. Paul Éluard)

Avatar
Arnaud Meurgues
Bloutiouf wrote:

les paramètres. J'ai fait un premier jet de mon travail, en séparant les
commandes par Â, les paramètres par Ê, etc. m'étant dit qu'en langue, on
ne met pas d'accent sur des majuscules


« en langue » ?

En français, en tout cas, ll faut accentuer les majuscules si l'on peut.
L'accent fait partie intégrante de l'orthographe d'un mot.

caractères, au passage que j'interdis (je les transforme en A, E, etc).
Ca marche bien, les commandes sont donc du genre
"loginÊmyloginÊmypasswordÂ" (le  est à la fin pour vérifier qu'on a
bien dans le buffer la totalité de la commande).

Seulement, je me dis que c'est pas très professionnel, et qu'il devrait
bien exister des solutions (quant à ces  et tout).


Vous devriez regarder à « sérialisation ». Car finalement, il s'agit de
sérialiser un ensemble de chaînes de caractère. Il peut très bien y
avoir un format pour donner la longueur d'une chaîne (un entier puis
autant de caractères qu'indiqué par l'entier, par exemple).

--
Arnaud

1 2