0

我正在使用 UDP,当多台机器需要连接到服务器时,我想知道接受方法。到目前为止,我正在使用 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 回答