Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1889 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] Ecrire un protocol de communication

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Ecrire un protocol de communication

n°166565
cassidy
Black Rainbow
Posté le 26-06-2002 à 16:35:57  profilanswer
 

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;
mood
Publicité
Posté le 26-06-2002 à 16:35:57  profilanswer
 

n°167565
cassidy
Black Rainbow
Posté le 27-06-2002 à 18:11:44  profilanswer
 

ca inspire personne??


---------------
Join us now and share the software;
n°167643
deepcore
Posté le 27-06-2002 à 20:24:40  profilanswer
 

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 ?  :??:

n°167731
cassidy
Black Rainbow
Posté le 27-06-2002 à 22:58:44  profilanswer
 

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


---------------
Join us now and share the software;
n°167752
koulip31
Posté le 27-06-2002 à 23:22:14  profilanswer
 

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));


---------------
télétunestel ouimélétuness sitélétunes mélétunetron [:koulip31] [:suri]
n°167768
cassidy
Black Rainbow
Posté le 27-06-2002 à 23:41:04  profilanswer
 

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?


---------------
Join us now and share the software;
n°167787
koulip31
Posté le 28-06-2002 à 00:40:55  profilanswer
 

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 ....  




Message édité par koulip31 le 28-06-2002 à 00:41:51

---------------
télétunestel ouimélétuness sitélétunes mélétunetron [:koulip31] [:suri]
n°167929
cassidy
Black Rainbow
Posté le 28-06-2002 à 11:00:19  profilanswer
 

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?


---------------
Join us now and share the software;
n°167936
koulip31
Posté le 28-06-2002 à 11:11:21  profilanswer
 

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
 
 
:123: 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 :P  
 
 


---------------
télétunestel ouimélétuness sitélétunes mélétunetron [:koulip31] [:suri]
n°167941
cassidy
Black Rainbow
Posté le 28-06-2002 à 11:20:52  profilanswer
 


nan enfait c'est plutot
 
:4: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.


---------------
Join us now and share the software;
mood
Publicité
Posté le 28-06-2002 à 11:20:52  profilanswer
 

n°168160
koulip31
Posté le 28-06-2002 à 17:13:20  profilanswer
 

cassidy a écrit a écrit :

   
nan enfait c'est plutot  
   
:4: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


Message édité par koulip31 le 28-06-2002 à 17:15:10

---------------
télétunestel ouimélétuness sitélétunes mélétunetron [:koulip31] [:suri]
n°168195
cassidy
Black Rainbow
Posté le 28-06-2002 à 18:39:17  profilanswer
 

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
 


---------------
Join us now and share the software;
n°168293
C_Po_Ma_Fa​ute
Posté le 28-06-2002 à 23:48:15  profilanswer
 

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.

n°168319
koulip31
Posté le 29-06-2002 à 01:54:56  profilanswer
 

[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


---------------
télétunestel ouimélétuness sitélétunes mélétunetron [:koulip31] [:suri]
n°168357
cassidy
Black Rainbow
Posté le 29-06-2002 à 11:36:47  profilanswer
 

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  :hello:


---------------
Join us now and share the software;
n°168361
fabsk
Posté le 29-06-2002 à 11:47:34  profilanswer
 

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)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] Ecrire un protocol de communication

 

Sujets relatifs
[ DELPHI ] écrire &quot; dans un noeud avec MSXML, c'est possible ?[delphi] Je souhaite ecrire des caractere sur le port serie ...
[HTML] Ecrire du texte sur une image ? .... ca avance !Ecrire dans 2 fichiers en meme temps...
Ecrire dans un Textarea depuis une autre FRAME[C] ecrire et lire
Editeur de texte utilisant le protocol ssh[C++] fstream : comment ouvrir, lire, écrire dans un fichier texte !?!
Visual C++ comment ecrire une chaine dans un BSTR?[WIN32]Ecrire fichier a partir dialogbox
Plus de sujets relatifs à : [C] Ecrire un protocol de communication


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR