【问题标题】:Does Socket ReceiveAsync support UDP?Socket ReceiveAsync 是否支持 UDP?
【发布时间】:2011-04-19 21:42:43
【问题描述】:

我看到了 TCP 的 ReceiveAsync 示例,但没有看到 UDP。 ReceiveAsync 与 UDP 兼容吗?如果是这样,你见过任何例子吗?

谢谢。

【问题讨论】:

    标签: c# sockets asynchronous udp


    【解决方案1】:

    UDP 是一种面向数据报的协议,因此您可以使用Socket.ReceiveFromAsync Method

    例子:

    var s = new Socket(SocketType.Dgram, ProtocolType.Udp);
    s.Bind(localEP);
    
    var e = new SocketAsyncEventArgs();
    e.Completed += OnReceive;
    e.RemoteEndPoint = new IPEndPoint(IPAddress.IPv6Any, 0);
    e.SetBuffer(new byte[BufferSize], 0, BufferSize);
    
    if (!s.ReceiveFromAsync(e)) OnReceive(s, e);
    

    【讨论】:

    • e的RemoteEndPoint不应该也分配给localEP吗?否则,它们将接受来自不同连接的消息(例如,SAEA 中的 IPAddress.IPv6Any 和 localEP 中的 IPAddress.IPv6None),并且只应用最严格的设置。
    • @HaMster:当接收 UDP 数据报时,localEP 是接收数据报的端点(数据报的目的地),e.RemoteEndPoint 指定接受数据报的允许端点(数据报的来源)。 e.RemoteEndPoint = new IPEndPoint(IPAddress.IPv6Any, 0); 表示接受任何来源的数据报; e.RemoteEndPoint = localEP 表示只接受从同一端点发送的数据报。
    • 完全有道理,我想我在下次写之前考虑一下^^
    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 2011-12-04
    • 2019-07-12
    • 2011-10-11
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多