begin process at 2012 05 30 14:02:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

Programmation Réseau en c : help !


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Programmation Réseau en c : help !

samedi 28 février 2004 à 18:36:12 | Programmation Réseau en c : help !

bubbless


Bonjour !

Dans le cadre d'un projet, je souhaiterais creer un système client/serveur en flux simple. Le but est en fait de permettre aux utilisateurs d'un jeu du compte est bon de joueur en réseau : il me suffit donc d'envoyer simplement de temps en temps les résultats, ou l'ordre de lancer le jeu. Eventuellement, si possible j'aimerais pouvoir inclure une possibilité de chat, mais, chaque chose en son temps !

J'ai donc programmé un tel système, mais, je me heurte à plusieurs problèmes : Help, please !
Tout d'abord, pour avoir accès aux fonctions nécessaires, j'ai inclu winsock.h , et même windows.h (j'utilise visual c++, mais j'ai le même problème avec dev c++),mais, au moment de mettre "build" (il n'y a apparemment pas d'erreur de syntaxe, ce qui signifie qu'apparemment il reconnait les instructions...), il m'indique de nombreuses erreurs de liens ! Par exemple :

jeureseau.obj : error LNK2001: unresolved external symbol _select@20
jeureseau.obj : error LNK2001: unresolved external symbol _accept@12
jeureseau.obj : error LNK2001: unresolved external symbol _listen@8
jeureseau.obj : error LNK2001: unresolved external symbol _bind@12
jeureseau.obj : error LNK2001: unresolved external symbol _htonl@4


Que dois-je faire pour éviter de telles erreurs ?? il m'est impossible de le tester dans de telles conditions..

D'autre part, je souhaiterais qu'au début de la partie, le serveur attende un nombre de joueur prédeterminé pour donner l'ordre de lancer le jeu, j'ai pour l'instant écrit celà de la façon suivante, mais j'ai de très gros doutes ! Pourriez vous m'indiquer si c'est bon ? :

if (listen(sockfd, BACKLOG) == -1)
{
perror("listen");
exit(1);
}

// Cependant, il nous faut garder toutes les connections entrantes, et les surveiller !
// (surtout si un chat est envisagé) : on va donc (essayer) d'utiliser la fonction 'select'
// On accepte donc toutes les connections entrantes, et on les ajoute au descripteur de
// fichier. Notons que pour l'appel à 'select', il faut garder en mémoire le maximum :
// avant d'ajouter la nouvelle socket à l'ensemble des socket déjà existantes, on
// compare donc sa valeur au maximum.

// Avant tout, initialisons l'ensemble des descripteurs de fichiers qui sera mis à jour
// au fur et à mesure des nouvelles connections

FD_ZERO(connexions);

// On va maintenant boucler pour accepter un nombre de connexions prédefinis au moment
// du choix du nombre de joueurs : on attend tous les joueurs.

joueurs=0; // Pour l'instant, on a accepté aucun joueur

// Avant d'accepter les joueurs, on définit le temps d'attente nécessaire à la
// fonction select : 3 secondes (par exemple)

temps.tv_sec=3;
temps.tv_usec=0;

while(joueurs<max_joueur)
{
sin_size = sizeof(struct sockaddr_in); // Il nous faut la taille de l'adresse...

if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1)
// La nouvelle socket est new_fd
{
perror("accept");
continue;
}
printf("serveur: Reçu connection de %s\n",inet_ntoa(their_addr.sin_addr));
joueurs=joueurs+1; // Un nouveau joueur est connecté

// On va maintenant ajouter cette connexion à la liste des connexions à surveiller :

FD_SET(new_fd,connexions);

// Et au tableau (plus facile à manipuler) des sockets

tabsock[joueurs-1]=new_fd;

// On vérifie que la nouvelle socket n'est pas plus grande que l'ancien max

if (max<new_fd) max=new_fd;
}

Enfin, j'ai deux autres questions :

La fonction select, telle que je l'ai par exemple utilisée là, modifie-t'elle la liste de sockets 'connexions' de façon à n'y laisser que ceux en attente (c'est à dire placés en mode recv) ou alors tous ceux qui sont encore connectés ? Enfin, il serait bien sûr plus simple de générer à chaque client un processus fils qui s'en occuperait personnellement, mais , je n'ai pu trouver de doc satisfaisante à ce sujet : quelqu'un aurait il quelque chose à me proposer ???

Merci beaucoup de toute l'aide que vous pourrez m'apporter, c'est vraiment très important et malheureusement, j'ai un prof de suivi qui ne m'aide que très peu (voire, pour l'instantpas du tout ...) Merci beaucoup par avance !!

Aurélien
samedi 28 février 2004 à 19:13:09 | Re : Programmation Réseau en c : help !

aardman

Membre Club
Salut,
Pour le 1er probleme, il faut linker ws2_32.lib pour pouvoir compiler.
Sous visual c++ tu peux ajouter ca apres les #includes:
#pragma comment(lib, "ws2_32.lib")

Pour la fonction select: si tu passes ta structure en 2eme param, elle ne laisse que les sockets qui peuvent lire quelque chose, accepter une connexion ou qui on été fermées (deconnexion).
C'est telement mieux expliqué sur MSDN...

Pour le dernier probleme, cela s'appele des threads et il y a pas mal d'exemples sur ce site.
dimanche 29 février 2004 à 19:47:07 | Re : Programmation Réseau en c : help !

bubbless


Merci beaucoup pour cette réponse ! ça marche tout de suite bcp mieux ! J'ai maintenant une autre question, mais, je vais la poster sur un autre sujet


Cette discussion est classée dans : temps, joueur, joueurs, fd, jeureseau


Répondre à ce message

Sujets en rapport avec ce message

Pb de gestion de nom des joueur [ par sebclick ] Slt,je debute en c++....je suis en train de créer un petit jeu de pendu....pour vous quel est la meilleure façon pour récuperer le nom des joueurs, sa K_CLOCK [ par sy3ns ] je voudrais pouvoir afficher le temps que met un joueur pour jouerj'elabore un petit jeule temps commence a défiler(et jaimerais le voir voir avancer) Puissance 4 [ par ziad91 ] Bonjour,jedoit réalisé un puissance 4 avec le choix de jouer a 2 joueurs ou contre une IA. J'ai bientot fini le 2 joueurs mais le problème c'est que a Encore une... "Erreur de segmantation" !! [ par TriFidEly ] Bonjour,Je suis en train de coder mon premier -vrai- programme, un Othello pour ma L2... mais j'ai un problème à l'exécution : "Une violation d'accès PROGRAMME C : TIC TAC TOE [ par celialita ] Bonjour , je suis débutante en programmation C et je voudrais programmer un tic tac toe mais je galere un peu . donc il s'agit de declarer une vari Gestion du temps [ par ArthurAuguste ] Bonjour, Est-il possible de calculer des durées en C++ sous Windows. J'ai vu GetLocalTime et SetLocalTime qui utilisent la structure SYSTEMTIME mais j Concaténation des chaines de caractères non signés en C++ [ par sloumanaw ] Bonjour, Je cherche un petit programme en C++ qui envoi et reçoit des trames à partir d'une interface Ethernet (soit à l'aide de winpcap ou autre). S temps de calcul [ par elhajjajireda ] Bonjour, si le vous plait j'ai une fonction qui permet d'extraire les points d'intérêt dans une image et je veux mettre un code ou bien une foction de memoire partage [ par chiro2000 ] Bonsoir Je suis actuellement entrain d' ecrire un jeu en utilisant les Shm; la map du jeu est stocke dans une shm que chaque processus appele joueur


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales