Problème d'exception non gérée avec les sockets C++
Bonjour,
Je suis en train de développer une application graphique sous Visual Studio 2010 en C++ / CLI (Windows Forms). Cette application doit communiquer avec plusieurs clients via le réseau. Pour cela, elle utilise les sockets.
J'ai une méthode publique issue de la classe Surveillance appelé par un pointeur dans le header de l'interface graphique (Form1.h), je n'ai pas trouvé comment accéder aux méthodes de la classe via Form1.h autrement que par pointeur.
Cette méthode initialise la connexion réseau et plante lorsque la fonction socket() est appelé. Apparemment, j'ai une exception qui n'est pas gérée 8O
La génération se fait bien mais lorsque je lance le programme en mode sans débogage, j'ai ce message :
http://img15.hostingpics.net/pics/605803Sanstitre1.jpg
En mode débogage normal, je n'ai aucune erreur cela dit.
Les codes :
Fichier surveillance.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
#pragma once
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <iostream>
#include <string>
#define dim 14
ref class Surveillance
{
int portServeur;
SOCKET sock, sockClient, sockServeur;
private:
int initialisationWSA();
public:
Surveillance(void);
int initialiserReseau();
int demarrerSurveillance();
int arreterSurveillance();
void setParametres(int);
}; |
Fichier surveillance.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
#include "StdAfx.h"
#include "Surveillance.h"
using namespace std;
Surveillance::Surveillance(void)
{
portServeur = 21500;
}
// Définition des méthodes privées
int Surveillance::initialisationWSA()
{
WSADATA WSAData;
int ok = -1;
int erreur = WSAStartup(MAKEWORD(2,0), &WSAData);
if(erreur != INVALID_SOCKET)
{
ok = 0;
}
return ok;
}
// Définition des méthodes publiques
int Surveillance::initialiserReseau()
{
// initialise la connexion réseau
int ok = -9;
int wsa = initialisationWSA();
if(wsa == 0)
{
ok = -8;
sockServeur = socket(AF_INET, SOCK_STREAM, 0);// ça plante à ce niveau là !
if(wsa == 0)
{
SOCKADDR_IN serveur;
serveur.sin_family = AF_INET;
serveur.sin_addr.s_addr = htonl(INADDR_ANY); // accepte toutes les adresses
serveur.sin_port = htons(portServeur); // écoute le port défini par portServeur
if((bind(sockServeur, (SOCKADDR *)&serveur, sizeof(serveur))) == SOCKET_ERROR)
{
ok = -2;
}
else
{
if((listen(sockServeur, 0)) == SOCKET_ERROR)
{
ok = -3;
}
else
{
SOCKADDR_IN client;
int clientsize = sizeof(client);
sock = accept(sockServeur, (SOCKADDR *) &client, &clientsize);
if((sock == INVALID_SOCKET))
{
ok = -4;
}
else
{
//adresse = inet_ntoa(serveur.sin_addr);
ok = 0;
}
}
}
}
return ok;
}
int Surveillance::demarrerSurveillance()
{
return 0;
}
int Surveillance::arreterSurveillance()
{
return 0;
}
void Surveillance::setParametres(int serv)
{
this->portServeur = serv;
} |
Et le bout du code de Form1.h qui appele ma méthode :
Code:
1 2 3 4 5 6
|
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
this->etatInit->Text = L"Initialisation de l'application ... ";
int net = surv->initialiserReseau(); // ça plante à ce niveau là !!
this->etatInit->Text = L"Valeur : " + Convert::ToString(net); // renvoi la valeur de retour de initialiserReseau pour essai
} |
Merci de votre aide !
Cordialement