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