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);
不应e的RemoteEndPoint也分配localEP?他们将接受来自不同连接的消息(例如,SAEA中的IPAddress.IPv6Any和本地EP中的IPAddress.IPv6None),否则只应用最严格的设置。 – HaMster 2013-08-17 14:39:12
@HaMster:当接收到UDP数据报时,'localEP'是接收数据报的端点(数据报的目的地址),'e.RemoteEndPoint'指定接受数据报的允许端点(数据报的来源)。 'e.RemoteEndPoint = new IPEndPoint(IPAddress.IPv6Any,0);'表示来自任何源的数据报都被接受; 'e.RemoteEndPoint = localEP'意味着只接受来自同一端点的数据报。 – dtb 2013-08-17 15:19:41
这是完全有道理的,我想我在下一次写之前会考虑^^ – HaMster 2013-08-18 15:27:03