Traduction server de linux vers windows

MLT -  
Bubonik Messages postés 2 Statut Membre -
Bonjour,

D'abord je mets le code, on verra les question plus tard !

fichier client.c :
#include "inet.h"

int main(int argc, char **argv){
  int i;
  int sockfd;
  char *ip_dest, *port_dest;
  struct sockaddr_in serv_addr, cli_addr;

  // verification des parametres
  cliParam(argc, argv, &ip_dest, &port_dest);
  
  // pour faire beau !
  printf("Connexion a %s:%s\n", ip_dest, port_dest);

  // initialisation des variables de connexion
  //  bzero((char *)&serv_addr, sizeof(serv_addr));
  ZeroMemory(&serv_addr, sizeof(serv_addr));
  serv_addr.sin_family      = AF_INET;
  serv_addr.sin_addr.s_addr = inet_addr(ip_dest);
  serv_addr.sin_port        = htons(atoi(port_dest));
  
  //  bzero((char *)&cli_addr, sizeof(cli_addr));
  ZeroMemory(&cli_addr, sizeof(cli_addr));
  cli_addr.sin_family      = AF_INET;
  cli_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  cli_addr.sin_port        = htons(0);
  
  // creation de la socket UDP
  if ((sockfd=socket(AF_INET, SOCK_DGRAM, 0)) < 0){
    perror("Impossible de creer la socket UDP");
    exit(1);
  }
  
#ifdef DEBUG
  printf("\n");
  printf("attachement de la socket au client :\n");
  printf("adresse : %d\n", cli_addr.sin_addr.s_addr);
  printf("port : %d\n", cli_addr.sin_port);
#endif
  
  // attachement de la socket
  if (bind(sockfd, (struct sockaddr *)&cli_addr, sizeof(cli_addr)) < 0){
    perror("Impossible d'attacher la socket UDP a l'adresse locale");
    exit(1);
  }

  // lancement du shell virtuel !
  shell(sockfd, (struct sockaddr *)&serv_addr);

  // fermeture de la socket
  //close(sockfd);
  closesocket(sockfd);

  return 0;
}


fichier inet.h :
#ifndef INET_H
#define INET_H

#include <stdio.h>
#include <sys/types.h>

//#include <sys/socket.h>
//#include <netinet/in.h>
//#include <arpa/inet.h>

#include <winsock2.h>

/*
  definition des constantes
*/

#define MAXMSG 100


/*
  definition des messages
*/

#define MSGOK     "ok;"
#define MSGNOTOK  "not_ok;"
#define MSGINIT   "init;"
#define MSGINITOK "init_ok;"
#define MSGQUIT   "quit;"


/*
  definitions des types utilises
*/

typedef enum {false, true} boolean;



/*
  prototypes des fonctions
*/

extern void cliParam(int nbParam, char **params, char **ip_dest, char **port_dest);
//extern void readLine(char **ligne);
extern void shell(int sockfd, struct sockaddr *serv_addr);

extern void servParam(int nbParam, char **params, char **port_src, char **ip_dest, char **port_dest);
extern void relai(int sock_in, int sock_out, struct sockaddr *cli_addr, struct sockaddr *serv_addr);
extern void final(int sock_in, struct sockaddr *cli_addr);

#endif





Mon fichier "inet.h" est inclu par tous les sources.
J'ai fabriqué ce client qui utilise le protocole UDP sous linux, tout marche comme prevu !
Maintenant, je souhaite qu'il fonctionne sous windows...

J'ai donc instalé le compilateur lcc-win32 (sans probleme) et j'ai lu la doc de l'api. J'ai du changer quelques fonctions pour la compatibilite (bzero ==> ZeroMemory ...).

Le probleme est le suivant, lorsque je veux compiler, j'obtient l'erreur suivante :

lcclnk client.obj cliParam.obj shell.obj -o client.exe
client.obj .text: undefined reference to '_inet_addr@4'
client.obj .text: undefined reference to '_htons@4'
client.obj .text: undefined reference to '_htonl@4'
client.obj .text: undefined reference to '_socket@12'
client.obj .text: undefined reference to '_bind@12'
client.obj .text: undefined reference to '_closesocket@4'
shell.obj .text: undefined reference to '_sendto@24'
shell.obj .text: undefined reference to '_recvfrom@24'
make: Error code 9
make: 'client.exe' removed.


J'ai verifie, ws2_32.lib est presente, au bon endroit et contient les smboles manquants !!!

Alors je cherche une bonne ame pour me guider sur la piste du bonheur.

Merci
A voir également:

4 réponses

MLT
 
en fait je pense quele probleme vient du fait que je n'utilise aucune fonction WSA.... car je n'ai toujours pas compris ce qu'elles font ni pourquoi les utiliser

@++
0
MLT
 
Au secours, personne ne sais donc programmer avec des sockets sous windows ? :'-(

@++
0
Bubonik Messages postés 2 Statut Membre
 
J'ai le même problème avec la même bibliothèque (winsock2.h) avec Dev c++.
Si je trouve une solution, je te la donnerai (mais comme je débute, c'est peu porbable).
0
Bubonik Messages postés 2 Statut Membre
 
Je crois avoir trouvé la réponse sur
http://www.cppfrance.com/forum.v2.aspx?ID=166140

En tout cas, chez moi ça a marché. Mais peut-être que cette solution est spécifique à Dev_c++.
Essaie tout de même, pour voir.
0