c# - 为什么没有触发异步套接字 send.completed 事件?
问题描述
试图发出一个 uPNP 发现请求。希望问题很简单。SendEvent_Completed
有没有被解雇的原因?
public void Send() {
var request = $"M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nMX: 1\r\nST: ssdp:all\r\n";
var requestData = Encoding.UTF8.GetBytes(request);
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.SendBufferSize = requestData.Length;
var sendEvent = new SocketAsyncEventArgs();
sendEvent.RemoteEndPoint = new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900);
sendEvent.SetBuffer(requestData, 0, requestData.Length);
sendEvent.Completed += SendEvent_Completed; ;
socket.SendToAsync(sendEvent);
}
private void SendEvent_Completed(object sender, SocketAsyncEventArgs e) {
Console.WriteLine("SendEvent_Completed"); // never called why?!
}
解决方案
它不会被提出的明显原因是如果SendToAsync
返回false
:
false
如果 I/O 操作同步完成。在这种情况下,不会引发参数Completed
上的事件,并且可以在方法调用返回后立即检查作为参数传递的对象以检索操作结果。e
e
由于您当前根本没有检查该值,因此无法知道该事件是否会在您当前的代码中引发。
推荐阅读
- c# - 在 Unity3D 中查找鼠标处地图的高度
- c - 未定义的 Windows 参考 _ftprintf
- android - 单击时更改列表视图项目的背景颜色 - 并记住它
- android - 如何在 android 上解码 m4a 音频
- google-sheets - 谷歌表格双数组查找
- arrays - Leetcode 867. 转置矩阵;调试;生成列表
- python - 如何使用散点图大小将 x,y 值的频率表示为每个 x 值总数的百分比?
- c# - IdentityServer4 AddSigningCredentials 和证书
- html - 从css将div定位到botton
- php - 使用 imagejpeg() 保存裁剪后的图像第二次同名