2017-09-23 14 views
0

私は数日前にこのプロジェクトを作成しました。ここで私はポートを移植してサーバーをホストすることができます。 どのように動作しますか。ポートを正しくポートフォリオに転送するにはどうすればよいですか?

  1. 私は "開く" を押してアプリケーション&を起動し、私は、サーバーを起動して、人々が

  2. に参加カント

  3. それはポートを開く(以下のコードを参照してください)

  4. 今すぐ港がオープンし、人々が参加することができます。


ルーターに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."); 
      } 
     } 
+0

なぜ新しいスレッドでClipboard.SetTextを呼び出していますか? –

+0

それ以外の場合は、本当に奇妙なエラーが表示されます。それをデバッグし、それが何であるかを確認するために、私はドームの上にエラーを考えることができません。 –

答えて

0

を使用しています。あなたが使用するNATライブラリは、このプロトコルに簡単にアクセスできるようにします。あなたの友人は、IGDプロトコルをサポートしていない、または無効になっているアクセスポイント(ワイヤレスモデム、スマートフォンなど)を使用しています。

関連する問題