Violation d'accès memcpy - socket ( client TCP )
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:
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:
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:
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 :
Citation:
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 ! :)