【问题标题】:Why is the async socket send.completed event not fired?为什么没有触发异步套接字 send.completed 事件?
【发布时间】:2019-07-26 19:28:03
【问题描述】:

试图发出一个 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?!
}

【问题讨论】:

    标签: c# sockets asyncsocket upnp


    【解决方案1】:

    如果SendToAsync 返回false,则不会引发它的明显原因是:

    false 如果 I/O 操作同步完成。在这种情况下,e 参数上的Completed 事件将不会引发,作为参数传递的e 对象可以在方法调用返回后立即检查以检索操作结果。

    由于您当前根本没有检查该值,因此无法知道当前代码中是否会引发事件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 2017-03-18
      相关资源
      最近更新 更多