Bonjour, voici mon probleme j'essaye de faire sur 2 sockets, alors sur un socket je recoit un ordre typiquement une chaine de caractere que je convertier en entier. Si cette odre est different de 0 alors on s'arrete d'envoyer sinon on continue.
Mon ordre que j'envoie, je l'ai verifier il fonctionne c'est "11".
Avec ce code la valeur que me renvoie recv est -1 et je ne sais pas pourquoi
Pouvez vous m'aider a chercher d'ou viens mon erreur merci.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
 
/********************************************************************/
/*                                                                  */
/*	 essai client    TCP                                            */
/*                                                                  */
/********************************************************************/
 
 
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#pragma comment(lib, "ws2_32.lib")
 
void main()
{
	int i=0;
	int ordre=0;
	int n=0;
	int fin=0;
 
	char buffer[255];
 
	WSADATA WSAData;
	WSAStartup(MAKEWORD(2,0), &WSAData);
 
 
	//Socket 1 celui de la reception des ordre**************************************
	SOCKET sock;
	SOCKADDR_IN sin;
 
	//CREATION d'un socket
	/* Tout est configuré pour se connecter sur ma propre machine */
	sock = socket(AF_INET, SOCK_STREAM, 0); // Mode TCP configurer ici
	printf("Socket 1 %d\n",sock);
	sin.sin_addr.s_addr			= inet_addr("172.24.247.84"); //adress
	sin.sin_family				= AF_INET; //domaine
	sin.sin_port				= htons(5000); // port
 
	//un bind toujours avant un listen
	if(	bind(sock, (SOCKADDR *)&sin, sizeof(sin)) <0)
		printf("ERREUR dans le bind\n");
	else
		printf("Bind 1 OK\n");
 
	 //On ecoute le socket sock
	if(	listen(sock, 0) <0 )
		printf("ERREUR dans le listen 1\n");
	else
		printf("Listen 1 OK\n");
 
	//ACCEPTATION
	int val;
	int lgsockaddr= sizeof(sin);
	printf("ACCEPT 1 ");
	val = accept(sock, (SOCKADDR *)&sin, &lgsockaddr );
	if(val != INVALID_SOCKET)
	{
		printf("%d\n",val);
	}
 
 
	//Socket 2 celui de l'envoie des données*************************************
	SOCKET sock2;
	SOCKADDR_IN sin2;
 
	//CREATION d'un socket
	// Tout est configuré pour se connecter sur ma propre machine 
	sock2 = socket(AF_INET, SOCK_STREAM, 0); // Mode TCP configurer ici
	printf("Socket 2 %d\n",sock2);
	sin2.sin_addr.s_addr			= inet_addr("172.24.247.84"); //adress
	sin2.sin_family				= AF_INET; //domaine
	sin2.sin_port				= htons(5001); // port
 
	//un bind toujours avant un listen
	if(	bind(sock2, (SOCKADDR *)&sin2, sizeof(sin2)) <0)
		printf("ERREUR dans le bind 2\n");
	else
		printf("Bind 2 OK\n");	
 
	 // On ecoute le socket sock
	if(	listen(sock2, 0) <0 )
		printf("ERREUR dans le listen 2\n");
	else
		printf("Listen 2 OK\n");
 
	//ACCEPTATION
	int val2;
	int lgsockaddr2= sizeof(sin2);
	printf("ACCEPT 2 ");
	val2 = accept(sock2, (SOCKADDR *)&sin2, &lgsockaddr2 );
	if(val2 != INVALID_SOCKET)
	{
		printf("%d\n",val2);
	}
 
 
	//Ouverture de fichier*****************************************************
	FILE* fichier;
	fichier=fopen("donnees.dat","r");
 
	if(fichier==NULL)
	{
		printf("Erreur a l'ouverture du fichier\n");
		exit(1);
	}
 
	while(fin!=EOF)
	{
		fin=fscanf(fichier,"%c",&buffer[n]);
		n++;
	}
	fclose (fichier);
 
	//VERIFICATION de la lecture du fichier	
	/*
	while(i!=n)
	{
		printf ("%c\n",buffer[i]);
		i++;
	}
	*/
 
	char reception[1];
	while(ordre==0)
	{
		//Reception Ordre
		int aux;
		printf("Pause\n");
		scanf("%d",&i);
		aux=recv(val, reception, sizeof(&reception), 0);
		printf("%d\t",aux);
		ordre=atoi(reception);
		printf("%d\n",ordre);
 
		/*
		n=0;
		while(n==10)
		{
			n++;
			send(val2,buffer,sizeof(buffer), 0); 		
		}
		*/
		//printf("Pause\n");
		//scanf("%d",&i);
	}
 
 
 
	//Fermeture de la connection
	if( closesocket(sock) <0 )
	{
		printf("ERREUR de fermeture de connection\n");
	}
	else
	{
		printf("Fermeture connection OK\n");
	}
	WSACleanup();
}
bien pratique ces balise de code.