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

4 réponses

  1. 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
  2. MLT
     
    Au secours, personne ne sais donc programmer avec des sockets sous windows ? :'-(

    @++
    0
  3. 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