首页 > 解决方案 > UDP async - 为什么要创建一个新的 UdpClient

问题描述

class UdpExample
{
    private UdpClient Client = new UdpClient(25971);

    public UdpExample()
    {
        Client.BeginReceive(DataReceived, Client);
    }

    private void DataReceived(IAsyncResult ar)
    {
        UdpClient c = (UdpClient)ar.AsyncState
        IpEndPoint receivedIpEndPoint = new IpEndPoint(IpAddress.Any, 0);
        Byte[] data = c.EndReceive(ar, ref receivedIpEndPoint);
    }
}

在上面的代码中,为什么新的UdpClient(c) 是由 制成的ar.AsyncState?为什么它不能只使用Client.EndReceive(使用 classwide UdpClient

标签: c#asynchronousudp

解决方案


ar.AsyncState就是object,它不是 UdpClient的,是 传入的那个。

为什么?因为如果你有很多这样的东西漂浮,你知道你在做什么,但是它不仅可以用于UdpClient你可以传递任何东西,并且可以肯定地知道它属于Begin你开始使用的东西。

我们看一下文档中的参数

state对象 - 包含有关接收操作的信息的用户定义对象。操作完成后,此对象将传递给 requestCallback 委托。


推荐阅读