windows socket, problème envoi de structure :s
je n'arrive pas à envoyer / recevoir des structures en utilisant send / recv.
ça me fait carrément planter la cmd. voici l'erreur windows :
Code:
1 2 3
|
AppName: serveur.exe AppVer: 0.0.0.0 ModName: serveur.exe
ModVer: 0.0.0.0 Offset: 00001415 |
voici le début du code (ouverture de la socket)
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
|
int main(int argc, char *argv[], char **envp){
SOCKET sock;
#ifdef WIN32
WSADATA wsaData;
// Importation de l'API Socket
if(WSAStartup(MAKEWORD(2,0), &wsaData) != 0){
perror("Pb Importation dll API Socket :s\n");
return -1; // on quitte alors le programme
}
else{
puts ("WIN: winsock2: OK");
}
#endif
// Création d'une instance de socket (protocole TCP/IP)
openSocket(&sock);
char *adresse = "192.168.0.2";
SOCKADDR_IN adresse_socket;
adresse_socket.sin_family = AF_INET;
adresse_socket.sin_port = htons(PORTSERVER);
adresse_socket.sin_addr.s_addr = inet_addr(adresse);
if( connect(sock,(struct sockaddr *) &adresse_socket,
sizeof(adresse_socket)) != 0){
perror("Pb Connexion socket\n");
return -3; // echec
} |
Le code qui plante :
Code:
1 2 3 4 5 6 7 8 9
|
myStruct tmp;
remplirStruct(&tmp); // fonction qui me remplit la structure
// pour l'émission ( coté serveur) :
send(sock,(void *)&tmp,sizeof(myStruct),0);
// pour la réception (coté client)
recv(sock,(void *)&tmp,sizeof(myStruct),0); |
la fin du code avec les deux fonctions d'ouverture et fermeture d'une socket :
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
|
closeSocket(&sock);
#ifdef WIN32
WSACleanup();
#endif
exit(0);
}
int closeSocket(SOCKET *sock){
if (closesocket(*sock)!=0){
printf("# Error fermeture socket %d\n",*sock);
}
else{
printf ("# Socket %d (TCP/IP mode) is now closed\n", *sock);
}
}
int openSocket(SOCKET *sock){
if ( (*sock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET){
perror("# Pb Création Instance Socket TCP/IP\n");
return -2; // echec
}
else{
printf ("# Socket %d is now opened in TCP/IP mode\n", *sock);
}
} |
A priori on est pas censé faire comme ça :s
est ce possible ou on est obliger d'envoyer des char* ?
cé relou si on peut pas le faire...