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
	
	| 12
 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); | 
 ceci fonctionne parfaitement sous linux mais sous windows cela ne fonctionne pas. En regardant dans le winsock.h, voici ce que l'on trouve.
	
	typedef struct sockaddr_in SOCKADDR_IN;
  Rien de bien grave ici. 
	
	| 12
 3
 4
 5
 6
 
 | struct sockaddr_in {
	short	sin_family;
	u_short	sin_port;
	struct	in_addr sin_addr;
	char	sin_zero[8];
}; | 
  Rien de bien méchant ici non plus. Mais si on regarde la structure in_addr, c'est ici que ça se complique.
	
	| 12
 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; | 
 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 :
	
	| 12
 3
 
 |  
SOCKADDR_IN addr;
addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); | 
 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.
merci de votre précieuse aide
						
					
Partager