Bonjours
Je ne parviens pas à compiler une source.
Voila donc la source en question :
Voila, donc pour ce code quand je compile j'obtiens :
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250 /******************************************************************** * Client simple avec l'utilisation de Socket en langage C * Compiler avec GCC (ide Code::Blocks) sous Windows * * Programed by Bug_Bug (==rtfm321) * * P.S. N'oubliez pas de linker avec la lib libwsock32.a *********************************************************************/ /* Verification que le compilateur est bien un compilateur C et pas C++ */ #ifdef __cplusplus #error Be sure you are using a C compiler... #endif #if defined (WIN32) /* Si on compile ce code source sous Windows, alors */ #include <winsock2.h> #elif defined (linux) /* Sinon si on compile sous linux, alors */ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define INVALID_SOCKET -1 #define SOCKET_ERROR -1 #define closesocket(s) close (s) typedef int SOCKET; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; #else #error not defined for this platform #endif #include <stdio.h> #include <stdlib.h> #define SERVER_PORT_CONNEXION 3113 char IP_SERVER[15] = "127.0.0.1"; /* localhost */ int App (void); int ConnectToServer ( SOCKET* ); /* connexion avec un client*/ int CommunicatWithServer ( SOCKET ); /*communication avec le client connecté */ int envoi_data ( SOCKET socket, char *data ); int recoi_data ( SOCKET socket, char *data ); /****************************************************************************** * * The main application... * ******************************************************************************/ int main (void) { #if defined (WIN32) /* Si on est sous windows il faut utiliser WSAStartup */ WSADATA wsa_data; /* Si l'initialisation sous windows echoue */ if ( WSAStartup (MAKEWORD (2, 2), &wsa_data) ) return EXIT_FAILURE; puts ("WIN: winsock2: OK"); #endif if ( App () ) /* si app() retourne 1 c'est qu'elle a echoué */ return EXIT_FAILURE; #if defined (WIN32) /* Fermer ce qu'on a initialiser avec WSAStartup */ WSACleanup (); #endif return EXIT_SUCCESS; } /****************************************************************************** * * Connexion du client au serveur et Communication... * ******************************************************************************/ int App (void) { SOCKET fdsock; /* Connexion avec le client */ if ( ConnectToServer (&fdsock) ) return 1; /* Communicat: si cette fonction retoune 1, c'est qu'il y a eu un probléme */ if ( CommunicatWithServer(fdsock) ) return 1; /* fermeture du socket */ shutdown (fdsock, 2); int sock_err; sock_err = closesocket (fdsock), fdsock = INVALID_SOCKET; if (sock_err == SOCKET_ERROR) { perror("App.socket.close"); return 1; } return 0; } /****************************************************************************** * * Connexion avec le client (sur csock) à partir du serveur (avec sock) : * ******************************************************************************/ int ConnectToServer ( SOCKET *fdSock ) { /* ouverture du socket */ if ( (*fdSock = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET ) { perror("socket.open"); return 1; } printf ("La socket %d est maintenant ouvert en mode TCP/IP\n", *fdSock); SOCKADDR_IN sin; sin.sin_addr.s_addr = inet_addr(IP_SERVER); /* IP automatique */ sin.sin_family = AF_INET; /* famille du protocol (IP) */ sin.sin_port = htons (SERVER_PORT_CONNEXION); /*port de connexion au serv*/ if ( connect(*fdSock, (SOCKADDR *)&sin, sizeof sin) == SOCKET_ERROR ) { perror("connect.err"); return 1; } printf ("connecter au serveur %s\n", IP_SERVER); return 0; } /****************************************************************************** * * Premet d'echanger des données avec le Serveur. Recevoir ou Envoyer * ******************************************************************************/ int CommunicatWithServer ( SOCKET fdSock ) { unsigned char data[128 + 1]; int end = 0; do { /* saisi d'une chaine de caractére */ fgets (data, sizeof(data), stdin); data[strlen(data)-1] = '\0'; if( strcmp(data, "/quit") == 0 ) end = 1; else { int sock_err = envoi_data (fdSock, data); if (sock_err == SOCKET_ERROR) { perror("CommunicatWithServer.recv"); end = 1; } } } while (!end); return 0; } /****************************************************************************** * * Permet d'envoyer proprement un Bloc de données. * Retourne la taille de donnée envoyer * ******************************************************************************/ int envoi_data ( SOCKET socket, char *data ) { size_t const len_data = strlen (data); size_t data_sent = 0; char len_data_buffer[10]; sprintf(len_data_buffer, "%d", len_data); /* envoi de la taille de data, comme etant une chaine */ int n = send (socket, len_data_buffer, strlen(len_data_buffer), 0); if (n == SOCKET_ERROR) return SOCKET_ERROR; /* envoi du reste, (s'il y a du reste) */ while (data_sent != len_data) { n = send (socket, data + data_sent, len_data - data_sent, 0); if (n >= 0) data_sent += n; else return SOCKET_ERROR; } return ((int)data_sent); } /****************************************************************************** * * Permet de recevoir proprement un Bloc de données * Retourne la taille de data reçu * ******************************************************************************/ int recoi_data ( SOCKET socket, char *data ) { size_t len_data; size_t data_receved = 0; char len_data_buffer[10]; /* recevoir la taille de data */ int n = recv (socket, len_data_buffer, sizeof(len_data_buffer), 0); if (n == SOCKET_ERROR) return SOCKET_ERROR; len_data = atoi(len_data_buffer); while (data_receved != len_data) { int n = recv (socket, data + data_receved, sizeof data - 1, 0); if (n >= 0) data_receved += n; else return SOCKET_ERROR; } return ((int)data_receved); }
Voila, donc bien sur je le rappel, je suis sur Visual C++ 2008 Express.Journal de génération Générer démarrée : Projet : Client, Configuration : Debug|Win32
Lignes de commande Création du fichier temporaire "d:\Documents\Visual Studio 2008\Projects\Client_Serveur\Client\Debug\RSP00000873163796.rsp" avec pour contenu
[
/Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MTd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /c /ZI /TC "..\client.c"
]
Création de la ligne de commande "cl.exe @"d:\Documents\Visual Studio 2008\Projects\Client_Serveur\Client\Debug\RSP00000873163796.rsp" /nologo /errorReport:prompt"
Fenêtre Sortie Compilation en cours...
client.c
d:\documents\visual studio 2008\projects\client_serveur\client.c(100) : error C2143: erreur de syntaxe : absence de ';' avant 'type'
d:\documents\visual studio 2008\projects\client_serveur\client.c(101) : error C2065: 'sock_err' : identificateur non déclaré
d:\documents\visual studio 2008\projects\client_serveur\client.c(102) : error C2065: 'sock_err' : identificateur non déclaré
d:\documents\visual studio 2008\projects\client_serveur\client.c(129) : error C2275: 'SOCKADDR_IN' : utilisation non conforme de ce type comme expression
c:\program files\microsoft platform sdk\include\winsock2.h(3779) : voir la déclaration de 'SOCKADDR_IN'
d:\documents\visual studio 2008\projects\client_serveur\client.c(129) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'sin'
d:\documents\visual studio 2008\projects\client_serveur\client.c(129) : error C2065: 'sin' : identificateur non déclaré
d:\documents\visual studio 2008\projects\client_serveur\client.c(130) : error C2065: 'sin' : identificateur non déclaré
d:\documents\visual studio 2008\projects\client_serveur\client.c(130) : error C2224: la partie gauche de '.sin_addr' doit avoir un type struct/union
d:\documents\visual studio 2008\projects\client_serveur\client.c(131) : error C2065: 'sin' : identificateur non déclaré
d:\documents\visual studio 2008\projects\client_serveur\client.c(131) : error C2224: la partie gauche de '.sin_family' doit avoir un type struct/union
d:\documents\visual studio 2008\projects\client_serveur\client.c(132) : error C2065: 'sin' : identificateur non déclaré
d:\documents\visual studio 2008\projects\client_serveur\client.c(132) : error C2224: la partie gauche de '.sin_port' doit avoir un type struct/union
d:\documents\visual studio 2008\projects\client_serveur\client.c(134) : error C2065: 'sin' : identificateur non déclaré
d:\documents\visual studio 2008\projects\client_serveur\client.c(134) : error C2065: 'sin' : identificateur non déclaré
d:\documents\visual studio 2008\projects\client_serveur\client.c(199) : error C2143: erreur de syntaxe : absence de ';' avant 'type'
d:\documents\visual studio 2008\projects\client_serveur\client.c(200) : error C2065: 'n' : identificateur non déclaré
d:\documents\visual studio 2008\projects\client_serveur\client.c(206) : error C2065: 'n' : identificateur non déclaré
d:\documents\visual studio 2008\projects\client_serveur\client.c(208) : error C2065: 'n' : identificateur non déclaré
d:\documents\visual studio 2008\projects\client_serveur\client.c(209) : error C2065: 'n' : identificateur non déclaré
Résultats Le journal de génération a été enregistré à l'emplacement "file://d:\Documents\Visual Studio 2008\Projects\Client_Serveur\Client\Debug\BuildLog.htm"
Client - 19 erreur(s), 0 avertissement(s)
Donc je tiens à préciser que ca ne viens pas de la source car d'autres personnes l'on compilé.
Mais je n'y parviens pas
En lisant des commentaires sur le net, j'ai entendu parler de Link de certaines librairie ?
Je savais le faire sur Devc++ mais en revenche si ca viens de ca, je ne sais pas faire sur Visual C++ 2008 Express. Et je n'ai trouver aucune information concernant ceci donc serais-ce automatic ?
Enfin je vous remerci de l'aide que vous m'apporterez,
Cordialement,
Am0
Partager