Guest User

Untitled

a guest
Jul 18th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. using System;
  2. using System.Diagnostics;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace ConsoleApp1
  9. {
  10. static class Program
  11. {
  12. private static Task<int> SendTaskAsync(this Socket socket, byte[] buffer, int offset, int size)
  13. {
  14. return Task.Factory.FromAsync(
  15. socket.BeginSend(buffer, offset, size, SocketFlags.None, null, socket),
  16. socket.EndSend);
  17. }
  18.  
  19. private static async Task SendAllTaskAsync(this Socket socket, byte[] buffer)
  20. {
  21. for (var i = 0; i != buffer.Length;)
  22. {
  23. i += await socket.SendTaskAsync(buffer, i, buffer.Length - i);
  24. }
  25. }
  26.  
  27. private static Task<int> ReceiveTaskAsync(this Socket socket, byte[] buffer)
  28. {
  29. return Task.Factory.FromAsync(
  30. socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, null, socket),
  31. socket.EndReceive);
  32. }
  33.  
  34. private static async Task ReceiveAllTaskAsync(this Socket socket, byte[] buffer)
  35. {
  36. for (var i = 0; i != buffer.Length;)
  37. {
  38. i += await Task.Factory.FromAsync(
  39. socket.BeginReceive(buffer, i, buffer.Length - i, SocketFlags.None, null, socket),
  40. socket.EndReceive);
  41. }
  42. }
  43.  
  44.  
  45. static async Task Main(string[] args)
  46. {
  47. var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  48. client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 60032));
  49. client.SendTimeout = 100 * 1000;
  50. client.ReceiveTimeout = 100 * 1000;
  51.  
  52. var sb = Encoding.UTF8.GetBytes("Hello, world!");
  53. var rb = new byte[sb.Length];
  54.  
  55. var sw = new Stopwatch();
  56. sw.Start();
  57. for (var i = 0; i < 100000; i++)
  58. {
  59. await client.SendAllTaskAsync(sb);
  60. await client.ReceiveAllTaskAsync(rb);
  61. }
  62. client.Shutdown(SocketShutdown.Both);
  63. sw.Stop();
  64.  
  65. Console.WriteLine(sw.Elapsed);
  66. }
  67. }
  68. }
Add Comment
Please, Sign In to add comment