Traduction server de linux vers windows
MLT
-
Bubonik Messages postés 2 Statut Membre -
Bubonik Messages postés 2 Statut Membre -
Bonjour,
D'abord je mets le code, on verra les question plus tard !
fichier client.c :
fichier inet.h :
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 :
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
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:
- Traduction server de linux vers windows
- Clé de produit windows 10 - Guide
- Windows 7 vers windows 10 - Accueil - Mise à jour
- Montage video gratuit windows - Guide
- Windows ne démarre pas - Guide
- Windows movie maker - Télécharger - Montage & Édition
4 réponses
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
@++
@++
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).
Si je trouve une solution, je te la donnerai (mais comme je débute, c'est peu porbable).
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.
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.