使用 TCPClient class:'No connection could be made because the target machine actively refused it'
Using TCPClient class: 'No connection could be made because the target machine actively refused it'
我已经在 VB 成功制作了几款游戏,现在准备继续尝试制作多人游戏。但是,由于我没有这方面的经验并且在互联网上找不到任何帮助我的东西,所以我遇到了一个我找不到解决方案的问题。我使用 VB 作为语言,虽然我在标签中放了 c#
因为我可以理解使用它的解决方案。
我试图通过使用 TCP 在玩家之间进行连接来制作一个 2 人游戏。
它使用 TcpListener
class 作为服务器代码,使用 TcpClient
class 作为客户端代码,并且几乎使用文档提供的模板:server, client.
服务器:
server = New TcpListener(IPAddress.Any, 48000)
而客户:
Dim client As New TcpClient()
client.Connect(hostAddr, 48000)
我正在同一台机器上使用服务器和客户端测试代码。当我将 hostAddr
设置为我计算机的本地 IP 地址时,代码可以正常工作,并且我可以在两个程序之间成功发送消息。
但是,当我提供 hostAddr
我的外部 IP 地址时,客户端代码因错误而无法运行:'No connection could be made because the target machine actively refused it'.
我试过以下方法,但对我不起作用:
关闭防火墙
正在更改我的路由器设置以允许通过所有端口进行 TCP 连接
我在 VM 中使用 Windows 10(我希望这不会影响事情)。
我能否就其他可能出错的地方提出一些建议,以及我应该如何调试以查明它们是否正确?另外我想请教朋友在自己的电脑(不在同一网络)上运行客户端,会不会遇到类似的问题
您需要检查客户端和服务器计算机中的防火墙设置,然后才能开始。大多数防火墙会阻止任何传入的计算机连接,您必须手动打开所需的端口。因此,要查看这是否是问题所在,您可以暂时禁用两者的防火墙。
下一个网络问题可能是您的 HyperV 配置。我相信默认情况下 HyperV 会创建一个 "private" 网络交换机,这意味着几乎每个来宾 OS 只能与自己对话。您可以创建一个交换机,以便只有 VM 可以相互通信,但为了开发,我通常选择公开主机网卡的交换机,并且使用该 hyperv 交换机的任何来宾都将被视为您网络上的另一台计算机,就好像他们是体检者。
当然,所有这些都取决于您指定服务器的方式; localhost 应该会跳过其中的大部分问题,但是如果您使用的是主机名,它可能会尝试使用网络适配器进行连接和返回,在这种情况下,上述问题可能会起作用。
我已经在 VB 成功制作了几款游戏,现在准备继续尝试制作多人游戏。但是,由于我没有这方面的经验并且在互联网上找不到任何帮助我的东西,所以我遇到了一个我找不到解决方案的问题。我使用 VB 作为语言,虽然我在标签中放了 c#
因为我可以理解使用它的解决方案。
我试图通过使用 TCP 在玩家之间进行连接来制作一个 2 人游戏。
它使用 TcpListener
class 作为服务器代码,使用 TcpClient
class 作为客户端代码,并且几乎使用文档提供的模板:server, client.
服务器:
server = New TcpListener(IPAddress.Any, 48000)
而客户:
Dim client As New TcpClient()
client.Connect(hostAddr, 48000)
我正在同一台机器上使用服务器和客户端测试代码。当我将 hostAddr
设置为我计算机的本地 IP 地址时,代码可以正常工作,并且我可以在两个程序之间成功发送消息。
但是,当我提供 hostAddr
我的外部 IP 地址时,客户端代码因错误而无法运行:'No connection could be made because the target machine actively refused it'.
我试过以下方法,但对我不起作用:
关闭防火墙
正在更改我的路由器设置以允许通过所有端口进行 TCP 连接
我在 VM 中使用 Windows 10(我希望这不会影响事情)。
我能否就其他可能出错的地方提出一些建议,以及我应该如何调试以查明它们是否正确?另外我想请教朋友在自己的电脑(不在同一网络)上运行客户端,会不会遇到类似的问题
您需要检查客户端和服务器计算机中的防火墙设置,然后才能开始。大多数防火墙会阻止任何传入的计算机连接,您必须手动打开所需的端口。因此,要查看这是否是问题所在,您可以暂时禁用两者的防火墙。
下一个网络问题可能是您的 HyperV 配置。我相信默认情况下 HyperV 会创建一个 "private" 网络交换机,这意味着几乎每个来宾 OS 只能与自己对话。您可以创建一个交换机,以便只有 VM 可以相互通信,但为了开发,我通常选择公开主机网卡的交换机,并且使用该 hyperv 交换机的任何来宾都将被视为您网络上的另一台计算机,就好像他们是体检者。
当然,所有这些都取决于您指定服务器的方式; localhost 应该会跳过其中的大部分问题,但是如果您使用的是主机名,它可能会尝试使用网络适配器进行连接和返回,在这种情况下,上述问题可能会起作用。