测试网络应用程序C#

时间:2010-10-23 03:54:13

标签: c# networking

我正在开发一个程序,它将通过p2p让多个用户相互连接。我想通过在一台计算机上打开几个实例来测试运行我的程序,并让这些实例进行通信,就像它们在不同的机器上一样(即:好像它是真实的东西)。知道如何处理这个吗?

谢谢,

PM

2 个答案:

答案 0 :(得分:1)

这样做的一个主要问题是.NET内部使用的Windows套接字API只允许一个应用程序同时绑定到给定端点(IP地址和端口)。

为了在一台机器上支持多个应用程序实例,您需要克服此限制。有很多种方法可以做到这一点,包括

  1. 运行多个虚拟机以允许每台计算机一个实例绑定到端点,就像多个真实客户端计算机一样。这是一个很好的策略,但是就运行多个客户操作系统和主机所需的资源而言,它可能变得相当昂贵。
  2. 添加对应用程序的支持,以便在单个计算机上运行多个实例。这通常涉及使用进程间通信机制将数据传递到绑定到端点的实例。
  3. 让每个实例使用不同的端点并使用UDP广播或多播,或使用其他一些IPC方式通知每个实例,其他实例绑定在一起,这样他们就可以“看到”彼此。
  4. Diagram of IPC communication between two instances

    在上图中,实例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地址,然后您可以与您的程序进行通信。