首页 文章

UDP套接字是否需要像TCP套接字一样通过Accept Process?

提问于
浏览
0

我正在使用UDP,当多台机器需要连接到服务器时,我想知道接受方法 . 到目前为止,我正在使用UDPCliente类,IPEndPoint类和BeginRecieve / EndRecieve方法来创建一台服务器,其中多台机器可以同时连接 .

我的问题很简单,我是否需要使用Accept Method来处理传入连接并为每个新连接创建一个新套接字?

处理与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);
}

2 回答

  • 1

    UDP是无连接的,所以没有什么可以接受的 . 如果需要通过UDP进行连接,则必须实现它们 . 理想情况下,您可以为每个“连接”分配某种标识符,并将其包含在发送到服务器的每个数据报中 . 在某些情况下,仅依靠IP地址和端口来识别“连接”就足够了 .

    但你可以随心所欲地做到这一点 . UDP将每个数据报视为独立的 .

  • 1

    简短回答 - 不,你不要使用带有UDP的 accept() .

    在UDP中没有连接,只有数据报 . 一方发送它们,另一方可能接收它们 . 每个数据报都包含有关您的服务器应用程序可以提取以区分客户端的发件人(IP地址和端口)的信息 .

相关问题