bonjour,
je me trouve confronté à un problème que je trouve bête mais n'arrive pas à le résoudre.
Sous linux, je peux faire quelque chose du genre pour attribuer une addresse IP au champ de la structure sockaddr_in
ceci fonctionne parfaitement sous linux mais sous windows cela ne fonctionne pas. En regardant dans le winsock.h, voici ce que l'on trouve.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 const char* ip = "192.168.1.10"; struct sockaddr_in addr; memset(&addr, 0, sizeof(struct sockaddr_in)); addr.sin_addr.s_addr = inet_addr(ip);
Rien de bien grave ici.
Code : Sélectionner tout - Visualiser dans une fenêtre à part typedef struct sockaddr_in SOCKADDR_IN;
Rien de bien méchant ici non plus. Mais si on regarde la structure in_addr, c'est ici que ça se complique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; };
J'ai essayé les 3 possibilités mais sans succès. au moment du bind j'ai une erreur. La seule qui fonctionne c'est si je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un;
Avec cette dernière méthode, ceci fonctionne mais impossible de trouver comment convertir mon const char* ip = "192.168.1.10"; pour pouvoir le mettre dans le champs d'adresse de la structure SOCKADDR_IN.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SOCKADDR_IN addr; addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
merci de votre précieuse aide
Partager