2016-07-30 4 views
0

私は現在オンラインゲームを開発中です。ゲーム内では、サーバーからクライアントにTCPとUDPを介してデータを送信する必要があります。 UDPホール・パンチングを実装するのは簡単ですが、私はTCP穴パンチを実装する方法は本当にわからない:Java TCP穴あけ

  1. サーバー:ServerSocketを指定されたポート1
  2. クライアントでリスニング:ソケット(オブジェクト)は上のサーバに接続しますポート1を使用するポート1
  3. 接続が確立されると、サーバーはserver.accept()からSocketオブジェクトを保持し、残りの時間にクライアントにデータを送信するために使用します。
  4. 接続が確立すると、 Socketオブジェクトを開き、ポート2のServerSocketを開きます。サーバーは、ポート1のSocketオブジェクトを使用してポート2にデータを送信できるようになりました。

3番か4番は正しいですか?クライアントは、両側がシャットダウンソケットを閉じた後

答えて

1

オプション3.

オプション4ために動作しません。サーバーはNATファイアウォールを越えて接続を開始する必要がありますが、これは明らかに機能しません。