UDP异步通信的常用方法
这些方法和TCP的异步方法使用类似 使用方法参考TCP的异步方法 ## 一、Begin相关的方法
1.BeginSendTo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| byte[] bytes = Encoding.UTF8.GetBytes("Hello World"); EndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080); socketUdp.BeginSendTo(bytes, 0, bytes.Length, SocketFlags.None,ipPoint, SendOver, socketUdp);
private void SendOver(IAsyncResult result) { try { Socket socket = (result.AsyncState as Socket); socket.EndSendTo(result); print("发送成功"); } catch (SocketException e) { Console.WriteLine(e); throw; } }
|
2.BeginReceiveTo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| private byte[] cacheBytes = new byte[512];
EndPoint ipPoint2 = new IPEndPoint(IPAddress.Any, 0); socketUdp.BeginReceiveFrom(cacheBytes, 0, cacheBytes.Length, SocketFlags.None, ref ipPoint2, ReceiveOver, (socketUdp,ipPoint2));
private void ReceiveOver(IAsyncResult result) { try { (Socket socket, EndPoint ipPoint) info = ((Socket, EndPoint) )result.AsyncState; int num = info.socket.EndReceiveFrom(result, ref info.ipPoint); info.socket.BeginReceiveFrom(cacheBytes, 0, cacheBytes.Length, SocketFlags.None, ref info.ipPoint, ReceiveOver, info); } catch (SocketException e) { Console.WriteLine(e); throw; } }
|
二、Async相关的方法
1.SendToAsync
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| SocketAsyncEventArgs args = new SocketAsyncEventArgs();
args.SetBuffer(bytes, 0, bytes.Length);
args.Completed += SendToOverAsync; socketUdp.SendToAsync(args);
private void SendToOverAsync(object socket, SocketAsyncEventArgs args) { if (args.SocketError == SocketError.Success) { print("发送成功"); } else { print("发送失败"); } }
|
2.ReceiveToAsync
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| SocketAsyncEventArgs args2 = new SocketAsyncEventArgs();
args2.SetBuffer(cacheBytes, 0, cacheBytes.Length);
args2.Completed += RecieveToOverAsync; socketUdp.SendToAsync(args2);
private void RecieveToOverAsync(object s, SocketAsyncEventArgs args) { if (args.SocketError == SocketError.Success) { print("接收成功"); Socket socket = s as Socket; args.SetBuffer(0, cacheBytes.Length); socket.ReceiveFromAsync(args); } else { print("接收失败"); } }
|