我正在開發一個程序,該程序將有多個用戶通過p2p相互連接。我想通過在一臺計算機上打開幾個實例來運行我的程序,並讓這些實例在不同的機器上進行通信(即:就好像它是真實的)。任何想法如何解決這個問題?測試網絡應用程序C#
感謝,
PM
我正在開發一個程序,該程序將有多個用戶通過p2p相互連接。我想通過在一臺計算機上打開幾個實例來運行我的程序,並讓這些實例在不同的機器上進行通信(即:就好像它是真實的)。任何想法如何解決這個問題?測試網絡應用程序C#
感謝,
PM
這樣做的一個主要問題是.NET在內部使用的Windows套接字API只允許一個應用程序一次綁定到給定的端點(IP地址和端口)。
爲了在單臺機器上支持多個應用程序實例,您需要克服此限制。有多種可能的方式來執行此操作,包括
在上述實例A開始第一,認爲端點上監聽的插座的框圖。當實例B啓動時,它將檢查另一個實例[1 *],並且在發現它不是唯一的實例將建立與實例A的IPC連接[2 *]
當發送消息時,實例B將寫入消息發送到它自己與實例A之間的IPC通道。實例B將在消息中包括唯一標識符,實例A使用該標識符來告知哪個實例消息來自哪個實例,並且將包含實例B的標識符的消息路由回到實例。
[1 *]檢查第二個實例的一種方法是使用命名的Mutex。在啓動時,應用程序應該嘗試獲取Mutex,如果它成功,那麼它是唯一的實例,並且應該綁定到監聽端點,如果獲取Mutex失敗,則應用程序的另一個實例正在運行,而第二個實例應嘗試獲取綁定到監聽端點的實例的IPC通道。
[2 *]如何獲取IPC通道特定於正在使用的通信中間體,例如,如果您使用的是命名管道,則第一個實例將使用您應用的所有實例已知的名稱創建管道,並且隨後的實例將打開連接到該管道的管道。
這絕不是一個完整的答案,但我希望它有幫助
嘗試虛擬化。也就是說,使用VMWare或VirtualBox(例如),您可以在單個系統上運行各種「機器」。只需創建三個或四個虛擬機,瞧......你有機會運行各種實例,就好像它是真實的。
確保您使用NAT網絡安裝它們,爲您的每臺機器分配自己的「內部」IP地址,然後您可以與您的程序進行通信。