c# - 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
)
解决方案
ar.AsyncState
就是object
,它不是新 UdpClient
的,是你 传入的那个。
为什么?因为如果你有很多这样的东西漂浮,你知道你在做什么,但是它不仅可以用于UdpClient
你可以传递任何东西,并且可以肯定地知道它属于Begin
你开始使用的东西。
我们看一下文档中的参数
state
对象 - 包含有关接收操作的信息的用户定义对象。操作完成后,此对象将传递给 requestCallback 委托。
推荐阅读
- python - 如何从数据框中提取特定值的索引和列?
- javascript - 如何避免 Jshint(在引用外部范围变量的循环中声明的函数可能会导致语义混淆)
- javascript - 将 Handlebars 与 Node.js/Express 一起使用,需要登录和注销才能根据用户登录进行渲染
- kotlin - Jetbrains Compose 的 Kotlin 内部错误 java.lang.IllegalStateException
- java - 通过 Java 文件使用 Avro Schema 别名
- javascript - Gsap 和 ReactJs。它可以工作/编译,但我有一个控制台错误。“未捕获的 TypeError:callback.call 不是函数”
- xamarin.forms - Xamarin Forms 数字键盘 - 启用空格和破折号按钮
- php - SHA512 转字符串,PHP
- arrays - 如何在sas中使用数组?
- javascript - 蚂蚁设计图标现在显示