我正在使用一个名为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服务器并且它运行良好,所以它在路由器上配置不错
答案 0 :(得分:1)
有些计算机有多个ips,事实上它们都有,你可能正在经历的是你绑定了你的应用程序来侦听端口127.0.0.1而不是64.323.23.234或理想情况下0.0.0.0会绑定你的所有IPS。检查peerConfig是否允许您选择绑定到默认值的ip可能是127.0.0.1
也可能是路由器的问题。尝试将您的计算机设为DMZ或启用端口转发。
答案 1 :(得分:1)
我不认为这与代码有关。
您的路由器需要配置主机,因为您尝试从路由器的私有端直接连接到路由器的公共端。
如果您只想连接到dyndns地址,这样您就不必更改代码,您也可以更改Windows主机文件。
答案 2 :(得分:0)
许多消费者路由器使用数据包源来确定是将数据视为内部数据还是外部数据。换句话说,如果您在内部网络上并尝试访问路由器的任何IP地址,您的路由器会将其视为内部(即使用自定义网站响应端口80,大多数其他网站没有响应)。
不幸的是,很难找到解决方案。