Ecrire un protocol de communication [C] - C++ - Programmation
Marsh Posté le 27-06-2002 à 18:11:44
ca inspire personne??
Marsh Posté le 27-06-2002 à 20:24:40
Houla, ce serait p'tet plus simple de travailler en mode connecté avec des sockets, plutôt que de t'enmerder avec tes paquets, non ?
Marsh Posté le 27-06-2002 à 22:58:44
ben suis en mode connecte (TCP) et c bien avec des sockets.
Qd je parle de 'packet' c une 'unite' d'information que j'envois entre le client et le server
Marsh Posté le 27-06-2002 à 23:22:14
cassidy a écrit a écrit : ben suis en mode connecte (TCP) et c bien avec des sockets. Qd je parle de 'packet' c une 'unite' d'information que j'envois entre le client et le server |
envoie directe une struct
cote server
t_ma_structure *toto
write(fd_socket, toto , sizeof(t_ma_structure));
cote client
read(fd_socket, toto , sizeof(t_ma_structure));
Marsh Posté le 27-06-2002 à 23:41:04
on sait envoier des structures comme ca???
et ben, avais po pense a ca..
v regarder de ce cote la
sinon je doa tjs m'amuser a splitter mes donnes en tit packet ou je peut directos envoier tout comme un bourin?
Marsh Posté le 28-06-2002 à 00:40:55
koulip31 a écrit a écrit : tu peux les envoiller comme un bourin seul truc faut reader de la bonne taille de l'autre cote ccl pour ton bp une struct stypedef struct s_carte { int id_data; int nro_paquet; int action; char data[128]; (exemple pour du texte) } et zou de lautre cote tu lit la meme structure et plus de pb de concat + deconcat and co .... |
Marsh Posté le 28-06-2002 à 11:00:19
merci bien
donc je fixe une valeur en dur pour data, ca veut dire que je devrais encore splitter mes commandes en plusieurs packets.
koike dans un 1er temps je pourrais me contenter de fixer une longeur max par commande et plus tard, si besoin est, m'amuser a splitter en plusieurs packets les longues commandes.
Dans ce cas la, je devrais faire un genre de pile ou un truc du genre pour stocker les packets non entier et les reconstitues apres, non?
Marsh Posté le 28-06-2002 à 11:11:21
cassidy a écrit a écrit : merci bien donc je fixe une valeur en dur pour data, ca veut dire que je devrais encore splitter mes commandes en plusieurs packets. koike dans un 1er temps je pourrais me contenter de fixer une longeur max par commande et plus tard, si besoin est, m'amuser a splitter en plusieurs packets les longues commandes. Dans ce cas la, je devrais faire un genre de pile ou un truc du genre pour stocker les packets non entier et les reconstitues apres, non? |
si jai bine compris ce que tu fait c'eest tu cree une chaine ayant cette geule
45:1234567:3:8:6
pour les action tassocie 1 chifre a une action
de meme pour les donnees
tu fait une table de "corespondance" action / chiffre assoscie
donc sa te fait une structure avec 6 ints
et zou ya plus de pb
ou tecrits tes 6 ints l'un derrier l'autre sur la socket mais la fait attention de pas avir de decalage
si tu veux garder tn systeme
tu fait une boucle
while(kkechose _lir_sur_la _socket && char _de _fin _de_ commande _pas_ trouve)
concatenner ;
en gros voila
Marsh Posté le 28-06-2002 à 11:20:52
nan enfait c'est plutot
12:1:2:r:bonjour:
l'action est coder sur un char et les donnees sont une chaine.
Au debut je voulais faire que qd les donnees etait trop longues, elle etait splitte en plusieurs packets, mais je pense que je vais me contenter que d'un packet a la fois ds un 1er temps.
Je vais regarder a ton idee de passer directos la struct, ca me simplifierait grandement la vie.
Marsh Posté le 28-06-2002 à 17:13:20
cassidy a écrit a écrit : nan enfait c'est plutot 12:1:2:r:bonjour: l'action est coder sur un char et les donnees sont une chaine. Au debut je voulais faire que qd les donnees etait trop longues, elle etait splitte en plusieurs packets, mais je pense que je vais me contenter que d'un packet a la fois ds un 1er temps. Je vais regarder a ton idee de passer directos la struct, ca me simplifierait grandement la vie. |
je supose que les datas c'est pour la parite chat de ton jeu ??
si c'est le cas le plus simple est d'ouvrir une seconde socket specialise a cet effet
ca serrat a la fois plus clair au niveau code
et plus simple a gerrer a mon avis
vas faire un tour du cote de www.gamedev.net
section article/tuto yen a pas mal sur le reseau
server bloquants / non bloqants
theorie + exemples de code
c'est tres instructif de plus tapprend des choses a cote
Marsh Posté le 28-06-2002 à 18:39:17
yep c pour le chat
enfin je pense que ca devrait aller, j'ai rajoute un char pour faire une 'sous-action'
avec action & sous action je devrait pouvoir faire la plupart de mes commandes du jeu sans rajouter de donnees ds data.
thx pour le lien, v aller jeter un oeil
Marsh Posté le 28-06-2002 à 23:48:15
Franchement faire des paquets, les splitter, ... je vois pas franchement l'intérêt, de plus tu parles de "remettre en ordre les paquets", en mode connecté (TCP) tes données arriveront toujours dans le bon ordre, par contre cela prendrait tout son intérêt si tu transmettais les données avec UDP pour avoir du pseudo temps réel (c souvent le cas dans les jeux 3D). Vu que les données que tu transmets sont toutes petites et pour faciliter le codage (et éventuellement le déboguage), je pense que tu complique inutilement les choses.
J'ajouterais que la question des perfs ne se pose même pas pour des échanges de qq 10aines d'octets à chaque fois.
Marsh Posté le 29-06-2002 à 01:54:56
[citation]
J'ajouterais que la question des perfs ne se pose même pas pour des échanges de qq 10aines d'octets à chaque fois.
[/citation]
sa depend du trafic sur le reseau
10octec nest pas totalement negligeable pour certainne api
c'est un peut comme les boucles dans les moteurs 3D
ouvre 2 socket c'est le truc le plus simple et le plus propre q mon avis
si tu trouve pas ton bonheur sur gamedev je pourrais tenvoiller 2/3 sources
Marsh Posté le 29-06-2002 à 11:36:47
yep je pense que je vais faire comme ca. un packet a la fois et laisser TCP faire son boulot
Assez interessant gamedev, mais pas mal sur les winsock (je code sous GNU/Linux).
Enfin ca va, je devrais reussi a me debrouiller comme ca
merci bien
Marsh Posté le 29-06-2002 à 11:47:34
Si tu veux faire des sockets multi plateformes, tu as la lib ACE
http://www.cs.wustl.edu/~schmidt/ACE-overview.html
Par contre, c'est assez gros... (parce qu'il y a des sockets, des threads...). C'est tres rapide (presque autant que l'API de ton systeme, la surcouche est tres fine)
Marsh Posté le 26-06-2002 à 16:35:57
Voila, je suis entrain (d'essaier ) de faire un jeu de carte multijoueur. J'ai donc un prog server et un prog client.
Je suis entrain de faire le protocol (cad la maniere dont vont discuter mes 2 progs); j'aimerais savoir si ce que je fait tiens la route ou si c foireux (etant autodidacte, j'ai jamais eu de cours de prog, donc j'ai quasi tout fait a l'intuition )
J'envois mes donnees par 'packet', je definis une taille max pour mes packets (c po fixe en dur ds le code, c juste un define a changer).
Un packet se presente comme suit:
:<longeur_total_des_donnees>:<id_des_donnees>:<no_packet>:<id_client>:<action>:<donnes>:
Si la longeur totale de toutes les donnees ne sais pas tenir ds un seul 'packet' alors elle est splitte en plusieurs 'packets' ayant le meme <id_donnees> et en incrementant a chaque fois le <no_packet>.
Tache donc au prog de l'autre cote de recevoir ces 'packets' les stocker puis les remettre dans l'ordre qd il a tout.
J'avais pense a faire un systeme de pile ou un truc du genre, mais je me rends compte que ca risque d'etre assez foireux et pas forcement robuste & performant.
J'aimerais donc avoir votre avis pour savoir si la maniere dont je dispose les donnes dans un packet est po trop debile.
Si ca vaut la peine que je m'amuse a splitter les longues donnnes en plusieurs packet sachant que je travaille en TCP.
merci bien
---------------
Join us now and share the software;