Erreur de segmentation du a bind()

Résolu
cs_Mick7 Messages postés 54 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 18 avril 2007 - 6 févr. 2007 à 14:21
cs_Mick7 Messages postés 54 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 18 avril 2007 - 6 févr. 2007 à 19:33
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

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
6 févr. 2007 à 19:20
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]
3
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
6 févr. 2007 à 14:37
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]
0
cs_Mick7 Messages postés 54 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 18 avril 2007
6 févr. 2007 à 18:44
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....
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
6 févr. 2007 à 18:50
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]
0

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

Posez votre question
cs_Mick7 Messages postés 54 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 18 avril 2007
6 févr. 2007 à 19:01
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.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
6 févr. 2007 à 19:07
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.
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
6 févr. 2007 à 19:08
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]
0
cs_Mick7 Messages postés 54 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 18 avril 2007
6 févr. 2007 à 19:17
#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);"
0
cs_Mick7 Messages postés 54 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 18 avril 2007
6 févr. 2007 à 19:33
Ok merci a vous 2 @+
0
Rejoignez-nous