Serveur et client en C++ comment communiquer?

W00n -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je veux faire un jeu en ligne en C++ avec un client en C++ aussi.

Ce que je ne comprends pas, c'est comment je dois m'y prendre pour appeler une fonction qui se trouvera sur le serveur à partir du client et ensuite, pour que le serveur renvoie la réponse au client et que le client "comprenne" que ce qu'il vient de recevoir du serveur, c'est la réponse à sa requête et pas autre chose.

Merci
A voir également:

8 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
les socket, c'est un flux, comme la lecture d'un fichier ou l'interaction avec un utilisateur.
les fonctions recv et send permettent de transmettre des information, il faut traiter ces informations comme tu traiterais une entrée utilisateur. Tu ne peux pas appeler directement une fonction, lorsque le serveur reçoit des informations, il faut qu'il regarde ces informations et les traite en conséquence.
J'utilise le terme générique "information", car il est possible de traiter des chaines de caractère, des entier, des float, des structures...
Par exemple, tu veux que le serveur exécute la fonction reload(). Du coté serveur tu fait :
send(sock,"reload\r\n",sizeof("reload\r\n"),0);

du coté serveur, tu fais :
char buf[256];
recv(sockd,buf,255,0);
if(!strcmp(buf,"reload"))
      reload();

voilà en gros l'idée.
0
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
Tu peux aussi utiliser corba c'est le plus propre.

Bonne chance
0
W00n
 
Ooooh merci c'est clair :3

Donc je pourrais par exemple utiliser un switch case pour déterminer quelle fonction utiliser? Disons que j'inclue dans les informations un nombre qui sert l'évaluation du case afon de faire exécuter la bonne fonction...?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Tu peux faire comme ça en effet.
Pour CORBA, je ne m'y connais pas. Le peu que j'en ai lu, c'est compliqué. Mais si c'est plus propre, ça pourrai être utile dans la suite.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
W00n
 
Est-ce que je devrais implémenter un système d'ID de requête pour m'assurer que la bonne requête recoive la bonne réponse?
Parce que la manière dont je vais fonctionner, c'est que côté serveur j'ai un parseur qui va parser les requêtes et les diriger vers le bon moteur, qui lui va interroger la base de données, faire les calculs et retourner la réponse au parseur qui la renverra via un socket.
Mon projet est un jeu... donc j'aurai un moteur pour les batailles, un moteur pour les duels, un moteur pour les dommages, etc.
Est-ce qu'il y a un danger qu'une deuxième requête se termine avant une première requête recue et que la réponse à la deuxième requête soit envoyé en tant que réponse à la première requête si les deux requêtes utilisent des moteurs différents?

Merci encore! :3
0
W00n
 
Hm laisse, je viens de me rendre compte que ma question n'a pas du tout de sens xD
0
W00n
 
Après mure réflexion, oui elle a rapport, puisque je ne prévois par que le parseur reçoive la réponse de la part du moteur, mais plutôt que le moteur envoie directement la réponse via le socket. Il faut donc que le moteur sache où envoyer la réponse et surtout que le client sache que la réponse qu'il vient de recevoir est la réponse à telle ou telle requête qu'il a envoyée...

En fait ce que je me demande... c'est si une requête reçue plus tard peut se terminer avant des requêtes qui ont été reçues avant celles-ci.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Bordel de site ! il a pas retenue ma première réponse.
Bon, alors, pour répondre à ta question, ça dépend de la manière dont tu codes. Si tu mets les requêtes dans une pile et que tu attends qu'une requête soit fini avant de traiter la suivante, ou si tu fait des thread qui s'exécuteront simultanément pour chaque requête, il y aura les deux comportements.
Après à toi de voir comment gérer ça.
0