TSocketTest.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using Common.Helper;
  5. using Common.Logger;
  6. using Microsoft.VisualStudio.TestTools.UnitTesting;
  7. using TNet;
  8. namespace TNetTest
  9. {
  10. [TestClass]
  11. public class TSocketTest
  12. {
  13. private Barrier barrier;
  14. private const int clientNum = 10;
  15. [TestMethod]
  16. public void SendRecv()
  17. {
  18. barrier = new Barrier(clientNum + 2);
  19. IPoller poller = new TPoller();
  20. Task.Factory.StartNew(() =>
  21. {
  22. while (true)
  23. {
  24. poller.Run(1);
  25. }
  26. },
  27. TaskCreationOptions.LongRunning);
  28. poller.Add(() => Server(poller));
  29. Thread.Sleep(500);
  30. for (int i = 0; i < clientNum; ++i)
  31. {
  32. poller.Add(() => Request(poller));
  33. }
  34. this.barrier.SignalAndWait();
  35. }
  36. private async void Server(IPoller poller)
  37. {
  38. TSocket acceptor = new TSocket(poller);
  39. acceptor.Bind("127.0.0.1", 10000);
  40. acceptor.Listen(100);
  41. for (int i = 0; i < clientNum; i++)
  42. {
  43. TSocket socket = new TSocket(poller);
  44. await acceptor.AcceptAsync(socket);
  45. Response(socket);
  46. }
  47. this.barrier.RemoveParticipant();
  48. }
  49. private static async void Response(TSocket socket)
  50. {
  51. byte[] buffer = new byte[10];
  52. for (int i = 0; i < 10000; i++)
  53. {
  54. await socket.RecvAsync(buffer, 0, buffer.Length);
  55. Array.Reverse(buffer);
  56. await socket.SendAsync(buffer, 0, buffer.Length);
  57. }
  58. await socket.DisconnectAsync();
  59. }
  60. private async void Request(IPoller poller)
  61. {
  62. TSocket client = new TSocket(poller);
  63. for (int i = 0; i < 10000; i++)
  64. {
  65. await client.ConnectAsync("127.0.0.1", 10000);
  66. byte[] buffer = "0123456789".ToByteArray();
  67. await client.SendAsync(buffer, 0, buffer.Length);
  68. await client.RecvAsync(buffer, 0, buffer.Length);
  69. Assert.AreEqual("9876543210", buffer.ToStr());
  70. }
  71. Log.Debug("1111111111111111111111111111111111111");
  72. this.barrier.RemoveParticipant();
  73. }
  74. }
  75. }