使用TCPClient类:'无法建立连接,因为目标计算机主动拒绝它'

时间:2016-08-14 14:45:59

标签: .net tcp virtualbox tcpclient multiplayer

我已经在VB中成功完成了几场比赛,现在我已准备好继续尝试制作多人游戏。但是,由于我没有这样的经验,并且在互联网上找不到任何帮助我,我有一个问题,我无法找到解决方案。我使用VB作为语言,虽然我已将c#放在标签中,因为我可以理解使用它的解决方案。

我试图通过使用TCP连接玩家来制作游戏2人游戏。

它使用TcpListener类作为服务器代码,使用TcpClient类作为客户端代码,并且几乎使用文档提供的模板:serverclient

服务器:

server = New TcpListener(IPAddress.Any, 48000)

客户:

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

我正在同一台机器上使用服务器和客户端测试代码。当我hostAddr我的计算机的本地IP地址时,代码完全正常,我可以在两个程序之间成功发送消息。

但是,当我提供hostAddr我的外部IP地址时,客户端代码无法正常工作,因为错误:“无法建立连接,因为目标计算机主动拒绝它”。

我尝试过以下哪些不适合我:

  1. 关闭防火墙

  2. 更改路由器设置以允许通过所有端口进行TCP连接

  3. 我在VM中使用Windows 10(我希望这不会影响事情)。

    我能否就其他可能出错的问题提出一些建议,以及我应该如何调试以确定它们是否属实?另外,如果我要求朋友在他们的计算机上运行客户端(不在同一个网络上),我想知道是否会遇到类似的问题。

1 个答案:

答案 0 :(得分:1)

您需要检查客户端和服务器计算机中的防火墙设置,然后开始。大多数防火墙都会阻止与计算机的任何传入连接,您必须手动打开所需的端口。因此,要查看这是否是问题,您可以暂时禁用两者上的防火墙。

下一个网络问题可能是您的HyperV配置。我相信默认情况下HyperV会创建一个" private"网络交换机,这意味着每个客户操作系统几乎只能与自己通信。您可以创建一个交换机,以便只有VM可以相互通信,但是对于开发,我通常选择暴露主机网卡的交换机,任何使用该hyperv交换机的客户机都将被视为您的另一台计算机网络,好像它们是物理的。

所有这些当然取决于您如何指定服务器; localhost应该跳过大多数这些问题,但如果您使用主机名,它可能会尝试使用网络适配器连接并重新连接,在这种情况下,上述内容可能会发挥作用。