我尝试在我的大学实验室计算机上运行 client.c 和 server.c,运行时没有错误,但在我的计算机上运行时显示错误消息。我该如何解决这个问题???我使用 OracleVM VisualBox 和 Ubuntu 16.04(64 位)LTS
我想要获取服务器 IP 地址。
它显示 eth0:获取接口信息时出错:未找到设备
服务器IP地址:(空)
配置文件
enp0s3
链路封装:以太网 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
链路封装:本地环回
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)
答案1
这更像是一个编程问题,而不是操作系统问题。最好将此问题连同相关源代码一起转发到 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
您可能更适合使用主机名和名称解析来获得更便携的客户端/服务器应用程序。祝你好运!
答案2
我不确定你的问题是什么。遗憾的是,你没有在 中提供网络接口的设置/etc/network/interfaces
。也许你可以尝试打开 来查看 virtualbox 以太网设置virtualbox window > right click on virtual machine > settings > Network
。确保启用网络适配器复选框被选中并选择所需的网络适配器。以太坊由于您从另一个虚拟机复制 Ubuntu,因此数字可能会发生变化。