LINUX.ORG.RU

Как написано IP адрес из sockaddr_in


0

0

Подскажите, пожалуйста, как вывести на экран IP адрес в нормальном виде типа xxx.xxx.xxx.xxx

int main() {

struct sockaddr_in addr; ...

inet_aton("10.12.110.57", &(addr.sin_addr.s_addr)); //>В сетевой порядок ...

printf("%s", .....); // А как обратно? ... }

anonymous

каждый байт выводи как десятичное число. Хотя может и функция какая есть.

Legioner ★★★★★
()
Ответ на: комментарий от anonymous

Значит так... Вот прога...

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <fcntl.h> #include <signal.h> #include <unistd.h>

int main() { struct sockaddr_in my_addr; my_addr.sin_family = AF_INET; my_addr.sin_port = htons(1234); inet_aton("10.12.110.57", &(my_addr.sin_addr.s_addr)); printf("\n%s\n", inet_ntoa(my_addr.sin_addr.s_addr)); return 0; }

Запускаю...

#./prg Segmentation fault

anonymous
()
Ответ на: комментарий от anonymous

In 32-bit architecture (in Linux/x86), struct in_addr type has only one element s_addr which is of type in_addr_t and this is defined as unsigned long type (4 bytes). However in 64-bit architecture(in Linux/x86_64), it is defined as unsigned int type (4bytes). Therefore when you try to print out dot notated ip address (xxx.xxx.xxx.xxx) using received data. It would not work:

printf(%s\n, inet_ntoa(saddr));

anonymous
()
Ответ на: комментарий от Bohtvaroh

Господа, всем спасибо. Рабочий вариант найден. :)

int main() {
    struct sockaddr_in addr;
    char buff[INET_ADDRSTRLEN];

    addr.sin_family = AF_INET;
    addr.sin_port = htons(3425);
    inet_aton("192.168.2.1", &addr.sin_addr.s_addr);
    inet_ntop(AF_INET, &addr.sin_addr.s_addr, buff, sizeof(buff));
    printf("%s\n", buff);
    return 0;
}

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.