0

私はUDPを使用していますが、複数のマシンがサーバーに接続する必要がある場合のAcceptメソッドについて疑問に思っていました。これまで、UDPClienteクラス、IPEndPointクラス、BeginRecieve / EndRecieveメソッドを使用して、複数のマシンが同時に接続できるサーバーを作成していました。

私の質問は簡単です。Acceptメソッドを使用して着信接続を処理し、新しい接続ごとに新しいソケットを作成する必要がありますか?

UDPで複数の接続を処理するための最良の方法は何ですか?

これまでに見たコードサンプルは、新しいUDPClientクラスとIPEndPointを作成し、サーバーはその後接続をリッスンします。コードはBeginRecieveを呼び出し、データを受信する関数を渡してから、BeginRecieveのプロセスを再開します。

これらは私がこれまで使用してきたコードサンプルです:

public static void receiveCallback(IAsyncResult ar)
{
    UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u;
    IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).e;

    byte[] receiveBytes = u.EndReceive(ar, ref e);
    UdpState s = new UdpState();
    s.e = e;
    s.u = u;
    u.BeginReceive(new AsyncCallback(receiveCallback), s);
}

public static void receiveMessages()
{
    IPEndPoint e = new IPEndPoint(IPAddress.Any, 5050);
    UdpClient u = new UdpClient(e);
    UdpState s = new UdpState();

    s.e = e;
    s.u = u;
    u.BeginReceive(new AsyncCallback(receiveCallback), s);
}
4

2 に答える 2

1

UDPはコネクションレス型であるため、受け入れるものは何もありません。UDPを介した接続が必要な場合は、それらを実装する必要があります。理想的には、各「接続」にある種の識別子を割り当て、それをサーバーに送信される各データグラムに含めます。場合によっては、「接続」を識別するためにIPアドレスとポートに依存するだけで十分な場合があります。

しかし、あなたはそれを好きなように行うことができます。UDPは、各データグラムを独立したものとして扱います。

于 2012-11-29T19:07:32.293 に答える
1

accept()簡単な答え-いいえ、 UDPでは使用しません。

UDPには接続はなく、データグラムのみがあります。一方がそれらを送信し、もう一方がそれらを受信する可能性があります。各データグラムには、サーバーアプリがクライアントを区別するために抽出できる送信者に関する情報(IPアドレスとポート)が含まれています。

于 2012-11-29T19:08:06.730 に答える