我正在开发一个程序,它将通过p2p让多个用户相互连接。我想通过在一台计算机上打开几个实例来测试运行我的程序,并让这些实例进行通信,就像它们在不同的机器上一样(即:好像它是真实的东西)。知道如何处理这个吗?
谢谢,
PM
答案 0 :(得分:1)
这样做的一个主要问题是.NET内部使用的Windows套接字API只允许一个应用程序同时绑定到给定端点(IP地址和端口)。
为了在一台机器上支持多个应用程序实例,您需要克服此限制。有很多种方法可以做到这一点,包括
在上图中,实例A首先启动,并保存正在侦听EndPoint的套接字。当实例B启动时,它将检查另一个实例[1 *]并且一旦发现它不是唯一的实例将建立到实例A的[2 *]
的IPC连接当发送消息时,实例B将消息写入其自身与实例A之间的IPC通道。实例B将在消息中包括唯一标识符,实例A使用该标识符来告知消息来自哪个实例,以及将包含实例B标识符的消息路由回实例。
[1 *]检查第二个实例的一种方法是使用命名的互斥锁。在启动时,应用程序应该尝试获取Mutex,如果它成功,那么它是唯一的实例并且应该绑定到侦听端点,如果获取Mutex失败,则应用程序的另一个实例正在运行,并且第二个实例应该尝试获取一个IPC通道,其实例绑定到侦听端点。
[2 *]如何获取IPC通道特定于正在使用的通信机制,例如,如果您使用命名管道,则第一个实例将使用您的应用程序的所有实例已知的名称创建管道,以及后续实例将打开连接到该管道的管道。
这绝不是一个完整的答案,但我希望它有所帮助
答案 1 :(得分:0)
尝试虚拟化。也就是说,使用VMWare或VirtualBox(例如),您可以在单个系统上运行各种“计算机”。只需创建三个或四个虚拟机即可......您有机会运行各种实例,就好像它是真实的一样。
确保使用NAT网络安装它们,为您的每台计算机提供自己的“内部”IP地址,然后您可以与您的程序进行通信。