Я делаю клиент-серверное приложение. Когда я пытаюсь получить IP-адрес для сервера, он показывает “пустой указатель”

Я пытаюсь выполнить client.c и server.c в моем Компьютере University Lab, он работает без ошибки, но он показывает сообщение об ошибке, когда я работаю в своем компьютере. Как может, я решил это??? Я использующий OracleVM VisualBox и использующий Ubuntu 16.04 LTS (на 64 бита)

Я хочу получить IP-адрес Сервера.

Это показывает eth0: ошибочная выборка соединяет интерфейсом с информацией: Устройство, не найденное

IP-адрес сервера: (пустой указатель)

ifconfig-a

enp0s3
Свяжите encap:Ethernet HWaddr 08:00:27:81:6e:cf

        inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
        inet6 addr:  fe80::3bf1:9b86:ba56:9c1d/64  Scope:Link
        UP BROADCAST RUNNING MULTICAST   MTU:1500  Metric:1
        RX packets:35963 errors:0 dropped:0 overruns:0 frame:0
        TX packets:10611 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueulen:1000
        RX bytes:39593069(39.5 MB)  TX bytes:933682 (933.6 KB)

lo
Свяжите encap:Local Обратную петлю

        inet addr:127.0.0.1  Mask:255.0.0.0
        inet6 addr: ::1/128 Scope:Host
        UP LOOPBACK RUNNING MTU:65536  Metric:1
        RX packerts:825 errors:0 dropped:0 overruns:0 frame:0
        TX packerts:825 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1
        RX bytes:77335 (77.3KB)   TX bytes:77335 (77.3KB)  
2
задан 9 August 2016 в 16:53

2 ответа

Это - больше вопроса о программировании, чем проблема ОС. Вы были бы лучше обслужены путем перерегистрации этого вопроса на stackoverflow наряду со связанным исходным кодом.

сказавший это. Это - то, как Вы выполняете итерации через все физические сетевые интерфейсы на любом Linux.

#include <stdio.h>      
#include <sys/types.h>
#include <ifaddrs.h>
#include <netinet/in.h> 
#include <string.h> 
#include <arpa/inet.h>

int main (int argc, const char * argv[]) {
    struct ifaddrs * ifAddrStruct=NULL;
    struct ifaddrs * ifa=NULL;
    void * tmpAddrPtr=NULL;

    getifaddrs(&ifAddrStruct);

    for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
        if (!ifa->ifa_addr) {
            continue;
        }
        if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IP4
            // is a valid IP4 Address
            tmpAddrPtr=&((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
            char addressBuffer[INET_ADDRSTRLEN];
            inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
            printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); 
        } else if (ifa->ifa_addr->sa_family == AF_INET6) { // check it is IP6
            // is a valid IP6 Address
            tmpAddrPtr=&((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
            char addressBuffer[INET6_ADDRSTRLEN];
            inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
            printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); 
        } 
    }
    if (ifAddrStruct!=NULL) freeifaddrs(ifAddrStruct);
    return 0;
}

Вывод в моей системе:

ppetraki@:tmp$ make net
cc     net.c   -o net
ppetraki@:tmp$ ./net
lo IP Address 127.0.0.1
br0 IP Address 10.1.0.12
virbr0 IP Address 192.168.122.1
lo IP Address ::1
eth7 IP Address fe80::56ee:75ff:fe6d:d29e
br0 IP Address fe80::56ee:75ff:fe6d:d29e

Вы - вероятно, более обеспеченное разрешение сетевых имен использования и определение имен для более портативного клиент-серверного приложения.Удачи!

1
ответ дан 2 December 2019 в 04:54

Я не уверен, какова Ваша проблема. К сожалению, Вы не обеспечили установку своего сетевого интерфейса в /etc/network/interfaces. Возможно, Вы могли попытаться смотреть на virtualbox настройки Ethernet путем открытия virtualbox window > right click on virtual machine > settings > Network. Удостоверьтесь , флажок Enable Network Adapter проверяется, и выберите желаемый сетевой адаптер. число eth может измененный, так как Вы копируете Ubuntu с другого virtualbox.

0
ответ дан 2 December 2019 в 04:54

Другие вопросы по тегам:

Похожие вопросы: