netowrkアプリを作成しようとしています。パッケージを送受信するサーバーを作成しました。これまでのところ、テストは127.0.0.1を指す1台のコンピューターで実行されています(自宅のような場所はありません)。今度はネットワークに切り替えたいと思います。特定のポートをリッスンしているLANネットワーク上のコンピューターを見つけるにはどうすればよいですか?
質問する
3058 次
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.2
1234
Server2
192.168.1.3
4567
3000
192.168.1.4
- クライアントは動的ポート範囲(49152-65535)でランダムなポートを選択し、UDP(この例ではポート50123)でそれにバインドしてリッスンします。
192.168.1.255:3000
クライアントは、リッスンしているのと同じポートを使用して、ブロードキャストアドレスとローカルサブネットの既知のポート( )にブロードキャストします。彼はある種のペイロードを送信するので、サーバーはあなたと同じポートをたまたま使用した他の誰かではなく、あなたのクライアントにのみ送り返します。(文字列を送信するとしましょうSend me your info for XYZ app!
)- Server1がブロードキャストを受信します。メッセージが送信者の送信元ポートとIPの組み合わせであることを確認し
Send me your info for XYZ app!
、UDPメッセージを送信者に送り返します( )Name:Server1 IP:192.168.1.2 Port:1234
192.168.1.4:50123
- Server2もブロードキャストを受信します。メッセージが送信者の送信元ポートとIPの組み合わせであることを確認し
Send me your info for XYZ app!
、UDPメッセージメッセージを送信者に送り返します( )Name:Server2 IP:192.168.1.3 Port:4567
192.168.1.4:50123
- クライアントは、メッセージを送信した同じポートで2つのUDPメッセージを受信します。彼は応答を解析し、接続に使用できる2つのサーバーをユーザーに表示します。
于 2012-10-27T21:26:08.473 に答える