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 :

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);
 
	}
}
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
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
L'instance de ma classe dans le programme principale ressemble à ça :

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
Mon RAD me renvoie cette erreur :

Violation d'accès à l'adresse 0040301E dans le module 'Project1.exe'.
Lecture de l'adresse 0000000A.
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.
J'espère que quelqu'un pourra m'aider à comprendre mon erreur !