Erreur de segmentation du a bind() [Résolu]

Signaler
Messages postés
54
Date d'inscription
samedi 11 septembre 2004
Statut
Membre
Dernière intervention
18 avril 2007
-
Messages postés
54
Date d'inscription
samedi 11 septembre 2004
Statut
Membre
Dernière intervention
18 avril 2007
-
Salut,
J'essaye de faire 2 petit programme client-serveur et au niveau du serveur j'ai un probleme, j'essaye donc de le debugger (avec dev-c++) et quand j'arrive sur la fonction bind() i me fait une erreur de segmentation.
Comment je peux faire pour regler ce probleme? Merci

9 réponses

Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
C'est ce que je craignais !
Evite le débugger de Dev-C++.
Moi pour débogger j'utilisais des MessageBox(...) pour afficher des valeurs.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Salut !

As-tu regardé sur d'autres programmes (présents sur le site par exemple) pour comparer ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
Messages postés
54
Date d'inscription
samedi 11 septembre 2004
Statut
Membre
Dernière intervention
18 avril 2007

J'ai regardé sur d'autre source et mon code à l'air correct :

#include <winsock2.h>
#include <windows.h>
#include

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
   
// ---- Ca c'est pour créer la socket et pouvoir envoyé et recevoir des info.... ---- //

   WSADATA WSAData;                                          //
   WSAStartup(MAKEWORD(2,2), &WSAData);   //
   SOCKET sock;                                                      //       Déclaration des variables
   SOCKET AcceptSock = INVALID_SOCKET;    //
   SOCKADDR_IN sin;                                           //                     
   SOCKADDR_IN AcceptSin;                               //
  
  
   sock = socket(AF_INET, SOCK_STREAM, 0);
   sin.sin_addr.s_addr             = INADDR_ANY;
   sin.sin_family                      = AF_INET;
   sin.sin_port                         = htons(81);
  
  
   bind(sock, (SOCKADDR *)&sin, sizeof(sin));     C'est la que ca bug....
   listen(sock, 0);
  
// ---------------------------------------------------------------------------------- //

Je comprend pas svp aidez moi....
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Déjà moi quand je crée un socket, je fais ça :
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // IPPROTO_TCP c'est pour le protocole TCP/IP et ça vaut 6, pas 0

Reste à savoir si c'est bien du tcp que tu veux.
A la vue de ton code je dirais que oui.
Teste ça et tiens moi au courant.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
Messages postés
54
Date d'inscription
samedi 11 septembre 2004
Statut
Membre
Dernière intervention
18 avril 2007

Merci pour la rapidité de ta reponse mais ca marche toujours pas, ce qui est bizare c'est qu'a la compilation j'ai pas d'erreur mais quand j'essaye de debuguer la j'ai l'erreur de segmentation. Je vois vraiment pas d'ou ca peut venir.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,

Met tout ton code, je vois pas d'erreur dans ce que tu as donné.

Pour la fonction socket(), on peut laisser 0 en dernier param ca change rien.
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Tu as essayé en mode normal (pas debug) ?
Parce que moi j'ai pas confiance en celui de Dev-C++.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
Messages postés
54
Date d'inscription
samedi 11 septembre 2004
Statut
Membre
Dernière intervention
18 avril 2007

#include <winsock2.h>
#include <windows.h>
#include

char Tampon[1024] , Path[1024];
int AcceptSinSize;
int Verreur;

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    
// ---- Ca c'est pour créer la socket et pouvoir envoyé et recevoir des info.... ---- //

   WSADATA WSAData;                                          //
   WSAStartup(MAKEWORD(2,2), &WSAData);   //
   SOCKET sock;                                                      //       Déclaration des variables
   SOCKET AcceptSock = INVALID_SOCKET;    //
   SOCKADDR_IN sin;                                           //                      
   SOCKADDR_IN AcceptSin;                                //
   
   
   sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   sin.sin_addr.s_addr            = INADDR_ANY;
   sin.sin_family                = AF_INET;
   sin.sin_port                    = htons(81);
   
   
   bind(sock, (SOCKADDR *)&sin, sizeof(sin));
   listen(sock, 0);
   
// ---------------------------------------------------------------------------------- //
   while (strcmp(Tampon, "deconnecter") != 0)
   {
    // ---- Cette partie attend une connection quand le serv n'a plus d'utilisateur ---- //
      
      AcceptSinSize = sizeof(AcceptSin);
      AcceptSock = INVALID_SOCKET;
      while (AcceptSock == INVALID_SOCKET)
      {
      AcceptSock = accept(sock, (SOCKADDR *)&AcceptSin, &AcceptSinSize);
      Sleep(100);
      }
      recv(AcceptSock, Tampon, strlen(Tampon), 0);  // La faut un mot de pass ça serai con qu'un boulet nique tout...
      
      
      if(strcmp(Tampon, "Pass") == 0)
      {
    // ---------------------------------------------------------------------------------// 

         GetCurrentDirectory(1024,  Path);        
         send(AcceptSock, Path, strlen(Path), 0); 
      }               
   }
   return 0;
}

Voila tout le code, mais je pense pas que ca viend de la.
Yoyo---->Si je ne fais que le compiler j'ai pas d'erreur de segmentation. mais j'aurais besoin de le debuguer pour voir ce que reçoit la variable Tampon.

Sinon il se peut aussi que l'erreur ai lieu au niveau de "listen(sock, 0);"
Messages postés
54
Date d'inscription
samedi 11 septembre 2004
Statut
Membre
Dernière intervention
18 avril 2007

Ok merci a vous 2 @+