是否可以为 tcpClient 设置任意 ip 地址?

Is it possible to set arbitrary ip address to tcpClient?

我得到了一个诊断程序来处理硬件设备网络。互连基于TCP协议。 诊断程序是服务端,使用TcpListener监听连接,硬件作为客户端连接到服务端并传输数据。 诊断程序和硬件设备的IP地址是预定义的,必须不变,诊断程序只等待预定义的硬件IP地址。
诊断程序的IP地址为192.168.1.11,硬件设备的IP地址为192.168.1.200、192.168.1.201等

+--------------+     +---------------+  
| [server]     |<--->| [hw client1]  |  
|              |     | 192.168.1.200 |  
| diagnostic   |     +---------------+  
| program      |     +---------------+  
| 192.168.1.11 |<--->| [hw client2]  |  
+--------------+     | 192.168.1.201 |  
                     +---------------+  

硬件目前实现了部分内部协议,诊断程序工作正常。我想改进 诊断程序 并在没有硬件设备(其软件尚未准备好)的情况下实施内部协议的下一部分。为此,我想实现软件模拟器作为硬件工作。我的计划是创建tcpClient,实现诊断程序和硬件设备交互的内部协议。
问题是我无法将任意 ip 地址设置为 tcpClient。我只能通过 localhost.
工作 是否可以创建程序来实现 tcpClient 所需的 ip 地址(例如 192.168.1.200)?

您需要将您的 NIC 切换为使用 DHCP 地址。

然后打开高级设置,添加第二个IP地址。

首先,让我们制作一个更详细的图表。

不是伪造 TcpClient 与之通信的 IP 地址,而是伪造 TcpClient。

所以基本上你的程序会变成。

这在原理上与单元测试时使用“Mock”非常相似。您需要做的就是创建一个接口,主要逻辑与之对话,包装 TCP 通信,当与真实硬件对话时,它会转到真实客户端 class 对象,当与您的模拟器对话时,它会与您的模拟器对话class 实现相同的接口。

我有另一种方法。
我想要的解决方案不会以任何方式影响我的诊断程序。
我使用了虚拟机(通过 virtualbox)。主要问题是正确设置主机和虚拟机的 IP 地址。宿主机是192.168.1.11,虚拟机里面是192.168.1.200.
结果,诊断程序不变,客户端运行在虚拟机上。