Bonjour ,
J'ai une question en ce qui concerne quelques lignes de codes sur les socket. Voici ce qui pose problème :
Cependant, je ne comprend pas pourquoi on utilise pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 target_addr.sin_addr = *((struct in_addr *) host_info->h_addr);
;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 target_addr.sin_addr.s_addr = *((struct in_addr *) host_info->h_addr)
Depuis le debut, j'ai compris que pour rentrer une adresse ip on mettait "target_addr.sin_addr.s_addr = ...".
Ici, dans mon cas, je crée:
On récupère ensuite l'adresse ip de l'hôte par la fonction gethostbyname(argv[1]), néanmoins, je ne comprend pas pourquoi lorsqu'on rentre l'adresse ip c'est à dire host_info->h_addr on ne met pas le s_addr à la suite de target_addr.sin_addr...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 struct hostent *host_info; struct sockaddr_in target_addr;
Après quelques heures de méditation () sur ce problème, pourriez vous m'expliquer ce que l'on fait réellement dans le cas énoncé ci dessus et aussi quelle est la différence entre sin_addr et s_addr ?
Quel lien y'a t'il entre s_addr, sin_addr, et h_addr ?
Merci de votre aide
Extrait du code source ( fatal est une fonction que j'ai crée ) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 int main(int argc, char *argv[]) { int sockfd; struct hostent *host_info; struct sockaddr_in target_addr; unsigned char buffer[4096]; if(argc < 2) { printf("Usage: %s <hostname>\n", argv[0]); exit(1); } if((host_info = gethostbyname(argv[1])) == NULL) { fatal("looking up hostname"); } if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) { fatal("in socket"); } target_addr.sin_family = AF_INET; target_addr.sin_port = htons(80); target_addr.sin_addr = *((struct in_addr *) host_info->h_addr); memset(&(target_addr.sin_zero), '\0', 8); ...
Partager