2016-08-14 235 views
0

我已經在VB中成功完成了幾個遊戲,現在準備繼續嘗試製作多人遊戲。然而,由於我沒有這方面的經驗,並且可以在互聯網上找到很少的東西來幫助我,所以我遇到了一個問題,我找不到解決方案。我使用VB作爲語言,但我已將c#放在標記中,因爲我可以理解使用它的解決方案。使用TCPClient類:'無法建立連接,因爲目標機器主動拒絕它'

我試圖通過使用TCP連接玩家來製作遊戲2人。

它使用TcpListener類客戶端代碼的服務器代碼和TcpClient類和幾乎使用這屆文檔提供了模板:serverclient

服務器:

server = New TcpListener(IPAddress.Any, 48000) 

而且客戶端:

Dim client As New TcpClient() 
client.Connect(hostAddr, 48000) 

我測試了使用服務器和客戶端在同一臺機器上的代碼。當我使我的計算機的本地IP地址爲hostAddr並且我可以在這兩個程序之間成功發送消息時,代碼工作得很好。

但是,當我給hostAddr我的外部IP地址時,客戶端代碼無法工作,因爲出現錯誤:'由於目標機器主動拒絕,無法建立連接'。

我試圖不爲我工作如下:

  1. 關閉防火牆

  2. 改變我的路由器設置所有端口允許TCP連接

我在VM中使用Windows 10(我希望這不會影響事物)。

對於還有什麼可能出錯,我該如何調試以確定它們是否屬實?我可否提出一些建議?另外,如果我要求朋友在他們的計算機上運行客戶端(不在同一網絡中),我想知道是否會遇到類似的問題。

回答

1

您需要檢查客戶端和服務器計算機中的防火牆設置,才能開始。大多數防火牆將阻止任何傳入連接到計算機,你必須手動打開你想要的端口。因此,要查看這是否是問題,您可以臨時禁用這兩個防火牆。

下一個網絡問題可能是您的HyperV配置。我相信默認情況下,HyperV會創建一個「專用」網絡交換機,這意味着幾乎每個客戶操作系統只能與自己交談。您可以創建一個交換機,以便虛擬機可以相互通信,但對於開發,我通常選擇公開主機網卡的交換機,並且使用該hyperv交換機的任何guest虛擬機都將被視爲網絡上的另一臺計算機,就像他們是身體。

所有這些當然取決於你如何指定服務器;本地主機應該跳過這些問題中的大部分,但是如果您使用的是主機名,它可能會嘗試使用網絡適配器連接並返回,在這種情況下,上述情況可能會發揮作用。

+0

現在我正在使用同一臺機器,因此只需關閉防火牆就可以工作(對於第一部分)? – Shuri2060

+0

另外,我爲我的虛擬機使用了VirtualBox,並認爲它與使用實際的計算機相同,因爲它可以連接到互聯網。我猜這是不正確的? – Shuri2060

+0

謝謝!我通過VM端口轉發解決了這個問題 - 事實證明這確實是問題 – Shuri2060

相關問題