c - 当你只有一台电脑时,如何模拟两台电脑连接局域网?

标签 c linux networking network-programming

我希望测试通过 LAN 连接的两台计算机之间的网络应用程序。

这些计算机将具有不同的 IP 地址。

我只有一台电脑。

如何模拟两台计算机通过 LAN 连接当我只有一台计算机时却有不同的 IP 地址?

Platform: Linux.

Language: C

最佳答案

这完全取决于您想要测试的内容。如果您不关心一些低级 TCP 细微差别,我认为您不需要像其他人建议的那样进入虚拟化。

请注意,套接字由端口号、协议(protocol)(TCP 与 UDP)和网络接口(interface)来标识。 当您绑定(bind)套接字时,您可以指定它应该监听哪个特定网络接口(interface)。但如果您不指定它(通常是这种情况),套接字将绑定(bind)到给定端口上的所有接口(interface)。 因此,您的计算机上有两个网络接口(interface)就足够了 - 例如,一个在 LAN 卡上,另一个在 WLAN 卡上,或者只是环回接口(interface)(localhost 又名 127.0.0.1 )请注意,每个接口(interface)上都有不同的 IP。 您只需要确保将套接字绑定(bind)到特定的 IP。程序的每个实例都绑定(bind)到不同的 IP。

假设您的 LAN 网卡上的 IP 是192.168.1.101。您可以使用以下代码仅监听此特定接口(interface):

/* ... */
int ssocket;
struct sockaddr_in address;

bzero((char *)&address, sizeof(address));
address.sin_family=AF_INET;
address.sin_port=htons(12345);
inet_aton("192.168.1.101", &address.sin_addr.s_addr);
ssocket = socket(PF_INET, SOCK_STREAM, 0);
bind(ssocket, (struct sockaddr *) &address, sizeof(address));
/* ... and so on ... */

请注意,此代码将监听 192.168.1.101:12345,但不会监听 127.0.0.1:123456。您可以在应用程序中配置监听 IP 地址。然后只需对一个实例使用 localhost,对应用程序的另一个实例使用 LAN 地址。

我很确定您也可以在 Linux 上创建虚拟网络接口(interface),但我还没有这样做过,所以您需要自己在 google 上搜索。

关于c - 当你只有一台电脑时,如何模拟两台电脑连接局域网?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16496875/

相关文章:

java - Kryonet:客户端不能同时发送和接收?

c - 在 C 中更改 void 指针值的问题

c++ - &a[x] 在 C 中返回什么类型的值

运行 start-stop-daemon 的能力

c - 如何在C程序中100%使用树莓派CPU?

c - 如何使用 netfilter Hook 在内核空间回显数据包?

java - 从 Java 应用程序发送邮件

c++ - libmysqlcppconn.so.5 : cannot open shared object file: No such file or directory

Android:在应用程序中间从 3G 切换到 WIFI = 网络连接丢失

java - 客户端已连接,但无法向服务器发送消息。[控制台聊天]