C++ socket winsock2.h
Fermé
Flo
-
3 févr. 2008 à 21:54
bitrate Messages postés 439 Date d'inscription vendredi 25 avril 2008 Statut Membre Dernière intervention 22 mars 2011 - 22 avril 2010 à 13:23
bitrate Messages postés 439 Date d'inscription vendredi 25 avril 2008 Statut Membre Dernière intervention 22 mars 2011 - 22 avril 2010 à 13:23
A voir également:
- C++ socket winsock2.h
- Télécharger logiciel dvr h 264 gratuit - Télécharger - Sécurité
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock' (2) ✓ - Forum Linux / Unix
- Convertir watt en km/h - Forum Matériel & Système
- Bac h - Forum Études / Formation High-Tech
- Attrib - s - h - h . * . * / s / d ✓ - Forum Windows 7
11 réponses
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
4 févr. 2008 à 08:55
4 févr. 2008 à 08:55
houla, pas simple ton problème...
j'ai lu que la bibliothèque winsock2.h ne pouvai être incluse plusieurs fois sinon ca buggé, est-ce que ca peut venir de la ?
C'est con ça, remarque avec windows ça m'étonnerai pas.
Tout ce que tu nous dit n'est pas très clair. Tu as un problème à la compilation ou à l'éxecution ?
Le mieux serai de mettre le bout de code qui merde ainsi que les erreurs produite.
j'ai lu que la bibliothèque winsock2.h ne pouvai être incluse plusieurs fois sinon ca buggé, est-ce que ca peut venir de la ?
C'est con ça, remarque avec windows ça m'étonnerai pas.
Tout ce que tu nous dit n'est pas très clair. Tu as un problème à la compilation ou à l'éxecution ?
Le mieux serai de mettre le bout de code qui merde ainsi que les erreurs produite.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pour ceux que ça peut aider :
Les headers windows (dont winsock2.h) définissent constantes, et si dans votre code source, vous utilisez une variable qui porte le même nom que cette constante, le compilateur remplacera le nom de votre variable par cette constante d'où le bug.
Dans ce cas, je pense que winsock2.h contient quelque chose du genre :
#define sock ...
ou
#define sin ...
Donc, quand dans le .h, il déclare
SOCKET sock;
SOCKADDR_IN sin;
et à chaque utilisation de ces variables, ça plante côté compilation.
Il suffit de changer le nom des variables par un nom qui n'est pas utilisé par les headers windows.
Les headers windows (dont winsock2.h) définissent constantes, et si dans votre code source, vous utilisez une variable qui porte le même nom que cette constante, le compilateur remplacera le nom de votre variable par cette constante d'où le bug.
Dans ce cas, je pense que winsock2.h contient quelque chose du genre :
#define sock ...
ou
#define sin ...
Donc, quand dans le .h, il déclare
SOCKET sock;
SOCKADDR_IN sin;
et à chaque utilisation de ces variables, ça plante côté compilation.
Il suffit de changer le nom des variables par un nom qui n'est pas utilisé par les headers windows.
bitrate
Messages postés
439
Date d'inscription
vendredi 25 avril 2008
Statut
Membre
Dernière intervention
22 mars 2011
98
21 avril 2010 à 16:37
21 avril 2010 à 16:37
#include <winsock.h>
ça suffit largement pour les accès réseaux de base.
winsock2.h n'aime pas trop être appelé plusieurs fois.
ou alors faut utiliser les entêtes précompilé (+ rapide et + propre)
A+
ça suffit largement pour les accès réseaux de base.
winsock2.h n'aime pas trop être appelé plusieurs fois.
ou alors faut utiliser les entêtes précompilé (+ rapide et + propre)
A+
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
22 avril 2010 à 08:45
22 avril 2010 à 08:45
winsock2.h n'aime pas trop être appelé plusieurs fois.
Là il faudrait m'expliquer pourquoi. Il n'y a pas de balises de gardes dans ce fichier ?
Là il faudrait m'expliquer pourquoi. Il n'y a pas de balises de gardes dans ce fichier ?
bitrate
Messages postés
439
Date d'inscription
vendredi 25 avril 2008
Statut
Membre
Dernière intervention
22 mars 2011
98
22 avril 2010 à 13:23
22 avril 2010 à 13:23
si mais ça déconne quand même ça dépend aussi de la version de windows utilisé. j'ai pas chercher j'ai remplacé par winsock.h et ça à réglé le problème.
A+
A+
voila les messages d'erreur
interface.cpp:12: error: expected identifier before "struct"
interface.cpp:12: error: expected identifier before '(' token
interface.cpp:12: error: expected unqualified-id before ')' token
interface.cpp:13: error: expected `,' or `;' before '{' token
interface.cpp:22: error: expected identifier before '~' token
interface.cpp:22: error: expected class-name before "struct"
interface.cpp:22: error: expected `,' or `;' before "struct"
interface.cpp:29: error: expected type-name
interface.cpp:29: error: expected unqualified-id before ')' token
interface.cpp:30: error: expected `,' or `;' before '{' token
interface.cpp:105: error: expected type-name
interface.cpp:105: error: expected unqualified-id before ')' token
interface.cpp:106: error: expected `,' or `;' before '{' token
interface.cpp:130: error: expected type-name
interface.cpp:130: error: expected unqualified-id before ')' token
interface.cpp:131: error: expected `,' or `;' before '{' token
Process terminated with status 1 (0 minutes, 2 seconds)
interface.cpp:12: error: expected identifier before "struct"
interface.cpp:12: error: expected identifier before '(' token
interface.cpp:12: error: expected unqualified-id before ')' token
interface.cpp:13: error: expected `,' or `;' before '{' token
interface.cpp:22: error: expected identifier before '~' token
interface.cpp:22: error: expected class-name before "struct"
interface.cpp:22: error: expected `,' or `;' before "struct"
interface.cpp:29: error: expected type-name
interface.cpp:29: error: expected unqualified-id before ')' token
interface.cpp:30: error: expected `,' or `;' before '{' token
interface.cpp:105: error: expected type-name
interface.cpp:105: error: expected unqualified-id before ')' token
interface.cpp:106: error: expected `,' or `;' before '{' token
interface.cpp:130: error: expected type-name
interface.cpp:130: error: expected unqualified-id before ')' token
interface.cpp:131: error: expected `,' or `;' before '{' token
Process terminated with status 1 (0 minutes, 2 seconds)
Salut, oui je sais c'est pas simple à expliquer, meme mon prof a pas trouvé .. hum hum.
Mon problème est à la compilation. voici le code (j'enleve quelques implémentations du code pour alléger la page)
Fichier reseau.hpp
#ifndef __Reseau__
#define __Reseau__
#include <winsock2.h>
#include <sys/types.h>
class reseau
{
public:
reseau();
~reseau();
void connexion_serveur();
void connexion_client();
private:
SOCKET sock;
SOCKADDR_IN sin;
};
#endif
Fichier reseau.cpp
#include <sys/types.h>
#include <iostream>
#include "reseau.hpp"
reseau::reseau()
{
}
reseau::~reseau()
{
}
void reseau::connexion_serveur()
{
//j'ai enlevé l'implémentation qui fonctionne dans un projet à part
}
void reseau::connexion_client()
{
idem
}
Fichier interface.hpp
#ifndef __Interface__
#define __Interface__
#include <SDL/SDL.h>
#include <string>
class interface
{
public:
interface();
~interface();
void menu_principal();
void config_partie();
void rejoindrePartie();
private:
SDL_Surface *ecran; //c'est la surface principale qui délimite la taille de la fenêtre
SDL_Surface *imageDeFond; // image de fond
SDL_Surface *creer; //bouton créer
SDL_Surface *rejoindre; // bouton rejoindre
};
#endif
Fichier interface.cpp
#include <SDL/SDL.h>
#include <string>
#include "interface.hpp"
#include "reseau.hpp" // je rajoute cette ligne et j'ai les messages d'erreur cités plus haut
void texture(int x, int y, SDL_Surface *source, SDL_Surface *destination);
interface::interface()
{
SDL_Surface *ecran= NULL;
SDL_Surface *imageDeFond = NULL;
SDL_Surface *creer = NULL;
SDL_Surface *rejoindre= NULL;
}
interface::~interface()
{
}
void interface::menu_principal()
{
}
void interface::config_partie()
{
}
void interface::rejoindrePartie()
{
}
//la fonction qui place les surfaces
void texture(int x, int y, SDL_Surface *source, SDL_Surface *destination)
{
}
Mon problème est à la compilation. voici le code (j'enleve quelques implémentations du code pour alléger la page)
Fichier reseau.hpp
#ifndef __Reseau__
#define __Reseau__
#include <winsock2.h>
#include <sys/types.h>
class reseau
{
public:
reseau();
~reseau();
void connexion_serveur();
void connexion_client();
private:
SOCKET sock;
SOCKADDR_IN sin;
};
#endif
Fichier reseau.cpp
#include <sys/types.h>
#include <iostream>
#include "reseau.hpp"
reseau::reseau()
{
}
reseau::~reseau()
{
}
void reseau::connexion_serveur()
{
//j'ai enlevé l'implémentation qui fonctionne dans un projet à part
}
void reseau::connexion_client()
{
idem
}
Fichier interface.hpp
#ifndef __Interface__
#define __Interface__
#include <SDL/SDL.h>
#include <string>
class interface
{
public:
interface();
~interface();
void menu_principal();
void config_partie();
void rejoindrePartie();
private:
SDL_Surface *ecran; //c'est la surface principale qui délimite la taille de la fenêtre
SDL_Surface *imageDeFond; // image de fond
SDL_Surface *creer; //bouton créer
SDL_Surface *rejoindre; // bouton rejoindre
};
#endif
Fichier interface.cpp
#include <SDL/SDL.h>
#include <string>
#include "interface.hpp"
#include "reseau.hpp" // je rajoute cette ligne et j'ai les messages d'erreur cités plus haut
void texture(int x, int y, SDL_Surface *source, SDL_Surface *destination);
interface::interface()
{
SDL_Surface *ecran= NULL;
SDL_Surface *imageDeFond = NULL;
SDL_Surface *creer = NULL;
SDL_Surface *rejoindre= NULL;
}
interface::~interface()
{
}
void interface::menu_principal()
{
}
void interface::config_partie()
{
}
void interface::rejoindrePartie()
{
}
//la fonction qui place les surfaces
void texture(int x, int y, SDL_Surface *source, SDL_Surface *destination)
{
}