2010-10-23 87 views
1

我正在開發一個程序,該程序將有多個用戶通過p2p相互連接。我想通過在一臺計算機上打開幾個實例來運行我的程序,並讓這些實例在不同的機器上進行通信(即:就好像它是真實的)。任何想法如何解決這個問題?測試網絡應用程序C#

感謝,

PM

回答

1

這樣做的一個主要問題是.NET在內部使用的Windows套接字API只允許一個應用程序一次綁定到給定的端點(IP地址和端口)。

爲了在單臺機器上支持多個應用程序實例,您需要克服此限制。有多種可能的方式來執行此操作,包括

  1. 運行多個虛擬機以允許每臺計算機一個實例綁定到端點,就像多臺真實客戶端計算機一樣。這是一個很好的策略,但是對於運行多個客戶操作系統和主機所需的資源而言,它可能會變得相當昂貴。
  2. 添加對在單臺機器上運行多個實例的應用程序的支持。這通常涉及使用進程間通信機制將數據傳遞到綁定到端點的實例。
  3. 讓每個實例使用不同的端點,並使用UDP廣播或多播或其他IPC方式通知每個實例其他綁定的位置,以便它們都可以「看到」彼此。

Diagram of IPC communication between two instances

在上述實例A開始第一,認爲端點上監聽的插座的框圖。當實例B啓動時,它將檢查另一個實例[1 *],並且在發現它不是唯一的實例將建立與實例A的IPC連接[2 *]

當發送消息時,實例B將寫入消息發送到它自己與實例A之間的IPC通道。實例B將在消息中包括唯一標識符,實例A使用該標識符來告知哪個實例消息來自哪個實例,並且將包含實例B的標識符的消息路由回到實例。

[1 *]檢查第二個實例的一種方法是使用命名的Mutex。在啓動時,應用程序應該嘗試獲取Mutex,如果它成功,那麼它是唯一的實例,並且應該綁定到監聽端點,如果獲取Mutex失敗,則應用程序的另一個實例正在運行,而第二個實例應嘗試獲取綁定到監聽端點的實例的IPC通道。

[2 *]如何獲取IPC通道特定於正在使用的通信中間體,例如,如果您使用的是命名管道,則第一個實例將使用您應用的所有實例已知的名稱創建管道,並且隨後的實例將打開連接到該管道的管道。

這絕不是一個完整的答案,但我希望它有幫助

0

嘗試虛擬化。也就是說,使用VMWare或VirtualBox(例如),您可以在單個系統上運行各種「機器」。只需創建三個或四個虛擬機,瞧......你有機會運行各種實例,就好像它是真實的。

確保您使用NAT網絡安裝它們,爲您的每臺機器分配自己的「內部」IP地址,然後您可以與您的程序進行通信。