2
我已經看到TCP的ReceiveAsync的例子,但不是UDP。 ReceiveAsync是否與UDP兼容?如果是這樣,你見過任何例子嗎?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