Salut tout le monde,
Alors voilà mon problème, je m'entraîne pour mon projet de deuxième année de BTS en réalisant un client TCP codé en C++.
Pour ça j'ai créé ma propre classe clientTCP qui se contente d'utiliser l'API socket de windows.
D'après mon RAD ( C++ Builder XE7 ) tout le code semble correct sauf la ligne où j'utilise le memcpy pour copier les informations de ma structure hostent dans ma structure in_addr.
Voici le code de l'implémentation du constructeur :
Voici l'en-tête de la classe :
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 clientTCP::clientTCP(const char* adresse_ip, unsigned long port) { //On vérifie que le port est valide if ( port >= 0 ) { //On affecte le port passé en paramètre this->port = port; //On initialise la zone mémoire de la structure d'adresse memset(&client_addr, 0, sizeof(struct sockaddr_in)); //On commence à renseigner les structures client_addr.sin_family = AF_INET; client_addr.sin_port = htons(port); serveur_host = gethostbyname(adresse_ip); memcpy(&client_addr.sin_addr, serveur_host->h_addr, serveur_host->h_length); //On crée une nouvelle socket sock = socket(AF_INET, SOCK_STREAM, 0); } }
L'instance de ma classe dans le programme principale ressemble à ça :
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 #ifndef clientTCPH #define clientTCPH #include <string> #include <winsock2.h> using namespace std; class clientTCP { private: unsigned long port; SOCKET sock; SOCKADDR_IN client_addr; hostent* serveur_host; public: clientTCP(); clientTCP(const char* adresse_ip, unsigned long port); int connectWithServer(); int sendData(const char* buf, unsigned long taille); int readData(char* buf, unsigned long taille); int closeConnexion(); ~clientTCP(); }; #endif
Mon RAD me renvoie cette erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 //Instance du client TCP clientTCP* client = new clientTCP(adresse_ip, port); //adresse_ip = "192.168.1.26" et port = 6666
Je n'arrive pas à voir d'où vient le problème, à priori j'essai de lire à une adresse dont je n'ai pas l'accès mais vraiment, je ne vois pas d'où vient le problème.Violation d'accès à l'adresse 0040301E dans le module 'Project1.exe'.
Lecture de l'adresse 0000000A.
J'espère que quelqu'un pourra m'aider à comprendre mon erreur !![]()
Partager