begin process at 2012 02 13 13:55:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Réseau & Internet

 > 

Compilation impossible sous Visual C++ 2008 Express


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Compilation impossible sous Visual C++ 2008 Express

mercredi 8 octobre 2008 à 07:13:19 | Compilation impossible sous Visual C++ 2008 Express

AMokers

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

mercredi 8 octobre 2008 à 09:18:06 | Re : Compilation impossible sous Visual C++ 2008 Express

fregolo52

Membre Club
Salut,

Tu as un pb de compil pas de link.

Tes erreurs sont liées à des déclarations "sauvages" en milieu de fonction, tu dois donc compiler en C et pas en C++.
Pour rappel :
SOCKADDR_IN sin; déclaré en plein milieu de code compile en C++ mais pas en C.
Déporte toutes tes déclarations en début de fonction ou if/while/for, ou compile en C++.
Pour le compilo regarde dans les propriétés de ton projet rubrique C/C++ option Advanced.
mercredi 8 octobre 2008 à 09:28:24 | Re : Compilation impossible sous Visual C++ 2008 Express

AMokers

Oui je comprend bien mais pourtant si tu regarde la source sur :
http://www.cppfrance.com/codes/SOCKET-CLIENT-SERVEUR_42385.aspx

Tu veras que le fichier à été crée en C donc c'est bien une source C,
De plus en lisant les commentaire beaucoup de gens l'ont compilé notemment sous linux !

Donc je suppose que ca viens pas de la.

Pour info j'ai essayer de compiller en C++ et ca me met :

fatal error C1189: #error : Be sure you are using a C compiler...

Chose qui est normal car :

#ifdef __cplusplus

#error

Be sure you are using a C compiler...

#endif

Vérifi si c'est pas compilé en c++ ;)

Donc c'est forcement du C et en plus la source à déja été compilée par plusieurs personnes ...

Si quelqu'un à d'autres idée, je suis preneur :D

Merci :)

mercredi 8 octobre 2008 à 09:46:06 | Re : Compilation impossible sous Visual C++ 2008 Express

fregolo52

Membre Club
Euh !!!!

Si tu regardes bien les commentaires tu verras que quelqu'un a eu le même pb que toi.

Et quelle est la réponse du créateur de la source ? : Déclarer les objet en erreur en début de fonction. Je te conseille donc de suivre ce qu'il dit.

Pour info, par expérience, les compilo évoluent, j'en ai fait l'expérience entre VC6 et VS2003, le même programme compil en VC6 et pas en VS2003 des warning sont passés en erreur.
mercredi 8 octobre 2008 à 09:55:20 | Re : Compilation impossible sous Visual C++ 2008 Express

AMokers

ha d'accord je vais te faire confiance alors ;)

Sinon je me dis c'est pas mieux d'utiliser un autre compilateur ?

Car si beaucoup de source sont mal codé n'est t-il pas mieux de prendre par exemple Code::Blocks Studio ?

Tu utilise quoi perso ?

Merci

mercredi 8 octobre 2008 à 10:04:59 | Re : Compilation impossible sous Visual C++ 2008 Express

fregolo52

Membre Club
Actuellement je suis sous VC6.

Avec j'étais sous VS2003 et gcc/g++, il fallait du code compatible Windows/Linux.

A un moment, j'ai eu la tâche de faire du lite sur le gros projet. Comme partout, il fallait faire plein de test sans matos, mon serveur (process) devait tourner sous Linux, et l'IHM sous  Windows, dur dur de faire des tests avec un seul PC, j'ai donc installé Code::Blocks, c'est un bon soft pour du multi-plateforme et il est convivial.

Si tu as des pb avec cet IDE, il y a des forums. Je ne l'ai plus sous la main donc je ne pourrai pas te conseiller.

PS : en effet; sous gcc (et tout compilo respectant la norme) son code ne devrait pas compiler, seul VC6 doit le compiler.


Cette discussion est classée dans : serveur, data, client, socket, error


Répondre à ce message

Sujets en rapport avec ce message

Tutorial - Socket, serveur, client BCPP + GUI [ par NyxArm ] Bonjours tout le monde, je suis présentement en période d'appretissage du language CPP sur Borland(v.6). Maintenant que j'ai acquis quelque conna Evènement sur un socket client [ par darsh99 ] J'aimerais savoir si la méthode utilisée par BlackGoddess pour son serveur (http://www.cppfrance.com/article.aspx?ID=1287) est récupérable pour gérer Thread et socket besoin de conseil [ par kawito ] Salut,je desire realiser un client/serveur TCPle probleme est que les fonctions accept et recv sont bloquante.donc cela bloque l'affichage etc...mon p programmation socket sous linux [ par blazman34 ] Bonjour à tous !!Voici mon probleme :Je suis en train de programmer une application client serveur sous linux, tout a bien marcher juska présent juska problème socket sous windows [ par kod32 ] Voici mon code : (winsock2.h)-----------------------------int main(){ /* inialisation */ WSADATA wsa; WSAStartup(MAKEWORD(2,0), &wsa); /* client & server [ par Stormy ] J'ai codé un serveur simple usant de TCP. Comme client j'utilise NetCat. Or, quand NetCat 'ferme', mon serveur ne détecte pas la clôture de la relatio Qd un Socket reçoit une trame erronée ... [ par valoue ] Bonjour,Je suis en train de développer una appli client serveur sous VC++, j'utilise des SOCKET.Le client et le serveur communiquent en s'envoyant des Client/Serveur, encore..... [ par glubust ] Je veux faire fonctionner une application client/serveur sous UNIX (client) et WINDOWS (serveur).Le programme client envoi une simple requête au serve !recv ou SOCKET_ERROR [ par AlexMAN ] Bonjour, J'ai lu sur msdn et un peu partt ke lon pouvait reconnaitre la deconnexion d'un client si recv renvoyait 0, mais lorsk je fais par exemple ce connection client serveur avec MFC [ par Spiffou ] Bonjour à tous,j'avance petit à petit dans la programmation socket, mais je suis confronté à une nouvelle difficulté et j'ai une ou deux question sans


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales