我希望测试通过 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/