0

我正在使用一个名为Lidgren network的库来处理我的应用程序的所有网络部分。它使用UDP。

我从来没有遇到过 TCP 应用程序和端口转发(apache、FTP、SMTP 等)的任何问题。我使用 TCP 做了一些 TCP 应用程序,我可以毫无问题地连接。

我现在正在制作一个在线游戏,我使用 UDP 进行网络传输。我在我的路由器中端口转发它,我让它运行。当我使用我的远程 IP 地址 (190.136.243.40) 连接到它时,我不能。当我使用环回(127.0.0.1)时,我可以毫无问题地连接。

我关闭了 Windows 防火墙,我重新启动了计算机,但我仍然无法使用我的远程 IP 地址进行连接。

这是我的代码的一部分:

public static class ServerInfo
{
    static ServerInfo()
    {
        ServerAddress = Dns.GetHostAddresses("leboran.dyndns.org")[0];
    }
    public const short Port = 6483;
    public static IPAddress ServerAddress;
    public const string AppIdentifier = "UnnamedGameNet";
    public static byte[] MagicByte
    {
        get
        {
            return new byte[4] { 0xF1, 0x64, 0x83, 0xC4 };
        }
    }
}

这是我启动服务器的部分,可能并不重要:

public void StartServer()
{
    this.listenThread = new Thread(ListenForClients);
    peerConfig = new NetPeerConfiguration(SharedConstants.ServerInfo.AppIdentifier);
    peerConfig.Port = SharedConstants.ServerInfo.Port;
    peerConfig.EnableMessageType(NetIncomingMessageType.DiscoveryRequest);
    peerConfig.EnableMessageType(NetIncomingMessageType.ConnectionApproval);
    peerConfig.ConnectionTimeout = 2144124;
    netServer = new NetServer(peerConfig);
    listenThread.Start();
}

我使用的端口是 6483。我在端口 25565 上运行 Minecraft 服务器,它运行良好,因此在路由器上配置不错

4

3 回答 3

1

我认为这与代码无关。

您的路由器需要配置主机,因为您正尝试从路由器的私有端直接连接到路由器的公共端。

如果您只想能够连接到 dyndns 地址,因此您不必更改代码,您也可以更改 Windows 主机文件。

于 2012-09-27T19:39:10.887 回答
1

有些计算机实际上有多个 ip,实际上它们都有,您可能遇到的是您已将应用程序绑定到监听端口 127.0.0.1 而不是 64.323.23.234 或理想情况下的 0.0.0.0 会绑定您的所有 ip。检查 peerConfig 是否允许您选择绑定到的 ip,默认值可能是 127.0.0.1

也可能是路由器的问题。尝试使您的计算机成为 DMZ 或启用端口转发。

于 2012-09-27T19:35:42.360 回答
0

许多消费者路由器使用数据包的来源来确定是将数据视为内部数据还是外部数据。换句话说,如果您在内部网络上并尝试访问路由器的任何 IP 地址,您的路由器会将其视为内部网络(即使用自定义网站响应端口 80,而其他大多数没有响应)。

不幸的是,很难找到解决方案。

于 2012-09-27T19:44:49.173 回答