je n'arrive pas à envoyer / recevoir des structures en utilisant send / recv.
ça me fait carrément planter la cmd. voici l'erreur windows :
voici le début du code (ouverture de la socket)
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
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 :
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 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);
A priori on est pas censé faire comme ça :s
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); } }
est ce possible ou on est obliger d'envoyer des char* ?
cé relou si on peut pas le faire...
Partager