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![]()
La g�n�ration se fait bien mais lorsque je lance le programme en mode sans d�bogage, j'ai ce message :
En mode d�bogage normal, je n'ai aucune erreur cela dit.
Les codes :
Fichier surveillance.h
Fichier surveillance.cpp
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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); };
Et le bout du code de Form1.h qui appele ma m�thode :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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; }
Merci de votre aide !
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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 }
Cordialement
Partager