Socket ReceiveAsync是否支持UDP?

问题描述:

我已经看到TCP的ReceiveAsync的例子,但不是UDP。 ReceiveAsync是否与UDP兼容?如果是这样,你见过任何例子吗?Socket ReceiveAsync是否支持UDP?

谢谢。

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); 
+0

不应e的RemoteEndPoint也分配localEP?他们将接受来自不同连接的消息(例如,SAEA中的IPAddress.IPv6Any和本地EP中的IPAddress.IPv6None),否则只应用最严格的设置。 – HaMster 2013-08-17 14:39:12

+2

@HaMster:当接收到UDP数据报时,'localEP'是接收数据报的端点(数据报的目的地址),'e.RemoteEndPoint'指定接受数据报的允许端点(数据报的来源)。 'e.RemoteEndPoint = new IPEndPoint(IPAddress.IPv6Any,0);'表示来自任何源的数据报都被接受; 'e.RemoteEndPoint = localEP'意味着只接受来自同一端点的数据报。 – dtb 2013-08-17 15:19:41

+0

这是完全有道理的,我想我在下一次写之前会考虑^^ – HaMster 2013-08-18 15:27:03