Я пытаюсь выполнить 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)
Это - больше вопроса о программировании, чем проблема ОС. Вы были бы лучше обслужены путем перерегистрации этого вопроса на 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
Вы - вероятно, более обеспеченное разрешение сетевых имен использования и определение имен для более портативного клиент-серверного приложения.Удачи!
Я не уверен, какова Ваша проблема. К сожалению, Вы не обеспечили установку своего сетевого интерфейса в /etc/network/interfaces
. Возможно, Вы могли попытаться смотреть на virtualbox настройки Ethernet путем открытия virtualbox window > right click on virtual machine > settings > Network
. Удостоверьтесь , флажок Enable Network Adapter проверяется, и выберите желаемый сетевой адаптер. число eth может измененный, так как Вы копируете Ubuntu с другого virtualbox.