我几天前创建了这个项目,我可以在这里端口端口,这样我就可以托管一台服务器。 它是如何工作的。如何正确地前移端口以及我的选项是什么?
我启动服务器和人民不能参加
我启动应用程序&我按下 “打开”
它打开的端口(见下面的代码)
现在港口是开放的,人们可以加入
如果我要用192.16.0.1登录到我的路由器并填写名称和密码,然后导航到portforward选项卡,我可以在确切结果的同时进行操作。 这是主要问题。我的朋友正在蜂窝网上奔跑,换句话说他正在用移动网络运行。我认为,它被称为
移动宽带
当他试图portforward它没有做任何事情。但是当我在家中的所有电脑上运行它时,它的作用就像一个魅力。
我现在面临的问题是,什么可能导致他无法使用此应用程序,我有什么选择?我应该尝试不同的图书馆吗?
我目前使用Mono.NAT
https://www.fluxbytes.com/csharp/upnp-port-forwarding-the-easy-way/
CODE
private bool btnOpenWasClicked = false;
private bool btnCloseWasClicked = false;
[STAThread]
private void btnOpen_Click(object sender, EventArgs e)
{
btnOpenWasClicked = true;
NatUtility.DeviceFound += DeviceFound;
NatUtility.StartDiscovery();
}
private void DeviceFound(object sender, DeviceEventArgs args)
{
if (btnOpenWasClicked == true)
{
INatDevice device = args.Device;
Mapping minecraftTCP = new Mapping(Protocol.Tcp, 25565, 25565);
Mapping minecraftUDP = new Mapping(Protocol.Udp, 25565, 25565);
minecraftTCP.Description = "MinecraftTCP";
minecraftUDP.Description = "MinecraftUDP";
device.CreatePortMap(minecraftTCP);
device.CreatePortMap(minecraftUDP);
foreach (Mapping portMap in device.GetAllMappings())
{
Debug.Print(portMap.ToString());
}
MessageBox.Show("Port 25565 has been opened.");
DialogResult diag = MessageBox.Show("This is the IP you will give to your friends: " + device.GetExternalIP().ToString() + ":25565" + " Do you wanna copy the IP? ",
"Success", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (diag == DialogResult.Yes)
{
Thread thread = new Thread(() => Clipboard.SetText(device.GetExternalIP() + ":25565"));
thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA
thread.Start();
thread.Join(); //Wait for the thread to end
}
}
if (btnCloseWasClicked == true)
{
INatDevice device = args.Device;
device.DeletePortMap(new Mapping(Protocol.Tcp, 25565, 25565));
device.DeletePortMap(new Mapping(Protocol.Udp, 25565, 25565));
MessageBox.Show("Port closed.");
}
}
你为什么在一个新的线程上调用Clipboard.SetText? –
因为否则它会引发一个非常奇怪的错误。为了调试它并检查它是什么,我不能想到圆顶顶部的错误。 –