代码之家  ›  专栏  ›  技术社区  ›  user472875

测试网络应用程序C#

  •  1
  • user472875  · 技术社区  · 14 年前

    我正在开发一个程序,它将有几个用户通过p2p连接到彼此。我想通过在一台计算机上打开几个实例来测试运行我的程序,并让这些实例像在不同的计算机上一样进行通信(即:好像这是真的一样)。你知道怎么做吗?

    谢谢,

    颗粒物

    2 回复  |  直到 14 年前
        1
  •  1
  •   Crippledsmurf    14 年前

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

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

    1. 运行多个虚拟机以允许每台计算机一个实例绑定到终结点,就像多个真正的客户机一样。这是一个很好的策略,但是在运行多个来宾操作系统和一个主机所需的资源方面,它可能会变得相当昂贵。
    2. 让每个实例使用不同的端点,并使用UDP广播或多播,或其他IPC方法通知每个实例其他实例的绑定位置,以便它们都可以“看到”对方。

    Diagram of IPC communication between two instances

    在上图中,实例A首先启动,并保存侦听端点的套接字。当实例B启动时,它将检查另一个实例[1*],当发现它不是唯一的实例时,它将建立到实例A的IPC连接[2*]

    [1*]检查第二个实例的一种方法是使用命名互斥体。启动时,应用程序应尝试获取互斥锁,如果成功,则它是唯一实例,应绑定到侦听终结点;如果获取互斥锁失败,则应用程序的另一个实例正在运行;第二个实例应尝试获取IPC通道,实例绑定到侦听终结点。

    [2*]获取IPC通道的方式取决于所使用的通信机制,例如,如果您使用的是命名管道,则第一个实例将使用您应用程序的所有实例都知道的名称创建管道,随后的实例将打开连接到该管道的管道。

    这决不是一个完整的答案,但我希望它能有所帮助

        2
  •  0
  •   akseli    14 年前

    尝试虚拟化。也就是说,使用VMWare或VirtualBox(例如),您可以在单个系统上运行各种“机器”。只需创建三到四个虚拟机,然后。。。你有机会运行各种实例,就好像它是真实的一样。