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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
 
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
 
    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...