如何在CLion中模拟带不同IP的SFML C++游戏双实例测试P2P通信?
实现同一机器双实例绑定不同IP的测试方案
1. 给本地网卡添加虚拟IP
同一物理机器默认只有一个局域网IP,需添加同网段虚拟IP模拟不同设备:
- Windows:打开
控制面板 > 网络和共享中心 > 更改适配器设置,右键当前网卡(以太网/Wi-Fi)→属性,找到Internet协议版本4 (TCP/IPv4)→属性→高级,在IP地址栏点击添加,输入同网段未占用IP(例:原IP为192.168.1.100,可添加192.168.1.101,子网掩码、网关与原IP保持一致),保存设置。 - Linux/macOS:用命令行添加虚拟IP。Linux执行
sudo ip addr add 192.168.1.101/24 dev eth0(eth0替换为你的网卡名,可通过ip link查看);macOS执行sudo ifconfig en0 alias 192.168.1.101 netmask 255.255.255.0(en0替换为你的网卡名)。
2. 修改代码支持启动参数指定绑定IP
修改SFML网络代码,让程序通过命令行参数接收要绑定的IP,替代硬编码:
#include <SFML/Network.hpp> #include <iostream> int main(int argc, char* argv[]) { sf::IpAddress bindIp = sf::IpAddress::Any; // 读取启动参数指定的IP if (argc >= 2) { bindIp = sf::IpAddress(argv[1]); } // 绑定UDP套接字(P2P常用UDP,TCP逻辑类似) sf::UdpSocket socket; if (socket.bind(5555, bindIp) != sf::Socket::Done) { std::cerr << "绑定IP " << bindIp.toString() << " 失败!" << std::endl; return 1; } std::cout << "已绑定IP: " << bindIp.toString() << " 端口: 5555" << std::endl; // 后续游戏逻辑... return 0; }
3. 在CLion中配置双启动实例
- 点击右上角运行配置下拉框,选择
Edit Configurations... - 找到你的游戏项目配置,右键选择
Duplicate复制出一个新配置 - 给第一个配置命名(例:
Game - Instance 1),在Program arguments栏填入第一个虚拟IP(如192.168.1.100) - 给第二个配置命名(例:
Game - Instance 2),在Program arguments栏填入第二个虚拟IP(如192.168.1.101) - 保存后,可单独启动每个实例,或右键选中两个配置选择
Run 'Game - Instance 1' and 'Game - Instance 2'同时启动
4. 验证通信
启动双实例后,让实例1向实例2的IP+端口(192.168.1.101:5555)发送测试数据,实例2向实例1的IP+端口(192.168.1.100:5555)回复,确认P2P通信正常即可。
内容的提问来源于stack exchange,提问作者martin Čonto
相关产品推荐
相关产品推荐

