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