You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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中配置双启动实例

  1. 点击右上角运行配置下拉框,选择Edit Configurations...
  2. 找到你的游戏项目配置,右键选择Duplicate复制出一个新配置
  3. 给第一个配置命名(例:Game - Instance 1),在Program arguments栏填入第一个虚拟IP(如192.168.1.100)
  4. 给第二个配置命名(例:Game - Instance 2),在Program arguments栏填入第二个虚拟IP(如192.168.1.101)
  5. 保存后,可单独启动每个实例,或右键选中两个配置选择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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:41:07