Bonjours :)
Je ne parviens pas à compiler une source.
La source en question proviens du site cppfrance dont voici l'url :
http://www.cppfrance.com/codes/SOCKET-CLIENT-SERVEUR_42385.aspx
Voila donc la source en question :
<code type="c">
/********************************************************************
* 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);
}
</code>
Voila, donc pour ce code quand je compile j'obtiens :
<liste>
</liste><citation nom="debug">
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 "
[ Lien ] Studio 2008\Projects\Client_Serveur\Client\Debug\BuildLog.htm"
Client - 19 erreur(s), 0 avertissement(s)
</citation>
Voila, donc bien sur je le rappel, je suis sur Visual C++ 2008 Express.
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 les commentaires sur le site cppfrance, 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