私は数日前にこのプロジェクトを作成しました。ここで私はポートを移植してサーバーをホストすることができます。 どのように動作しますか。ポートを正しくポートフォリオに転送するにはどうすればよいですか?
私は "開く" を押してアプリケーション&を起動し、私は、サーバーを起動して、人々が
に参加カント
それはポートを開く(以下のコードを参照してください)
今すぐ港がオープンし、人々が参加することができます。
ルーターに192.16.0.1でログインし、名前とパスワードを入力してポートフォワードタブに移動すると、正確な結果と同じ時間を実行できます。 ここに主要な問題があります。私の友人はセルラーネットで走っています。言い換えれば、彼はモバイルネットで走っています。私は、彼はそれがすべてで何もしていないportforwardしようとしたとき、それが
モバイルブロードバンド
と呼ばれると思います。しかし、私はそれを魅力のように動作します。
私が今直面している問題は、彼がこのアプリケーションを使用できなくなる原因となる可能性があり、私の選択肢は何ですか?私は別のライブラリを試してみるべきですか?
私は現在、あなたのインターネットのアクセスポイント(例えばルータ)がIGD Protocolをサポートしているので、それはあなたのために働くという事実がある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を呼び出していますか? –
それ以外の場合は、本当に奇妙なエラーが表示されます。それをデバッグし、それが何であるかを確認するために、私はドームの上にエラーを考えることができません。 –