5

netowrkアプリを作成しようとしています。パッケージを送受信するサーバーを作成しました。これまでのところ、テストは127.0.0.1を指す1台のコンピューターで実行されています(自宅のような場所はありません)。今度はネットワークに切り替えたいと思います。特定のポートをリッスンしているLANネットワーク上のコンピューターを見つけるにはどうすればよいですか?

4

1 に答える 1

5

サービスは、既知のポートでブロードキャストメッセージをリッスンする必要があります(本当に正常に動作したい場合は、プログラムとポート番号をIANAに登録できます)。ブロードキャストメッセージを聞くと、サーバーのIPと送信者に応答します。サービスが着信接続をリッスンしているポート。

上記のリンクの簡単な例を次に示します。これは、接続したコンソールとどのポートに出力されるかを示していますが、この情報を使用して、2つのエンドポイント間にTCPまたはUDP接続を確立できます。

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class RecvBroadcst
{
  public static void Main()
  {
   Socket sock = new Socket(AddressFamily.InterNetwork,
           SocketType.Dgram, ProtocolType.Udp);
   IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
   sock.Bind(iep);
   EndPoint ep = (EndPoint)iep;
   Console.WriteLine("Ready to receive…");
   byte[] data = new byte[1024];
   int recv = sock.ReceiveFrom(data, ref ep);
   string stringData = Encoding.ASCII.GetString(data, 0, recv);
   Console.WriteLine("received: {0} from: {1}",
              stringData, ep.ToString());
   data = new byte[1024];
   recv = sock.ReceiveFrom(data, ref ep);
   stringData = Encoding.ASCII.GetString(data, 0, recv);
   Console.WriteLine("received: {0} from: {1}",
              stringData, ep.ToString());
   sock.Close();
  }
}

疑似的な例として、ここに私がそれを行う方法に関する一連のイベントがあります。

この例では、IPが。192.168.1.0でサブネットが。のネットワークがあるとします255.255.255.0。2つのサーバーがあります。サービスがポートでリッスンしているときと、Server1サービス用のポートがあるときです。どちらもブロードキャストメッセージのポートにリストされています。接続するクライアントはIPになります192.168.1.21234Server2192.168.1.345673000192.168.1.4

  1. クライアントは動的ポート範囲(49152-65535)でランダムなポートを選択し、UDP(この例ではポート50123)でそれにバインドしてリッスンします。
  2. 192.168.1.255:3000クライアントは、リッスンしているのと同じポートを使用して、ブロードキャストアドレスとローカルサブネットの既知のポート( )にブロードキャストします。彼はある種のペイロードを送信するので、サーバーはあなたと同じポートをたまたま使用した他の誰かではなく、あなたのクライアントにのみ送り返します。(文字列を送信するとしましょうSend me your info for XYZ app!
  3. Server1がブロードキャストを受信します。メッセージが送信者の送信元ポートとIPの組み合わせであることを確認しSend me your info for XYZ app!、UDPメッセージを送信者に送り返します( )Name:Server1 IP:192.168.1.2 Port:1234192.168.1.4:50123
  4. Server2もブロードキャストを受信します。メッセージが送信者の送信元ポートとIPの組み合わせであることを確認しSend me your info for XYZ app!、UDPメッセージメッセージを送信者に送り返します( )Name:Server2 IP:192.168.1.3 Port:4567192.168.1.4:50123
  5. クライアントは、メッセージを送信した同じポートで2つのUDPメッセージを受信します。彼は応答を解析し、接続に使用できる2つのサーバーをユーザーに表示します。
于 2012-10-27T21:26:08.473 に答える