TSocketTest.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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(() => poller.Run(), TaskCreationOptions.LongRunning);
  21. poller.Add(() => Server(poller));
  22. Thread.Sleep(500);
  23. for (int i = 0; i < clientNum; ++i)
  24. {
  25. poller.Add(() => Request(poller));
  26. }
  27. this.barrier.SignalAndWait();
  28. }
  29. private async void Server(IPoller poller)
  30. {
  31. TSocket acceptor = new TSocket(poller);
  32. acceptor.Bind("127.0.0.1", 10000);
  33. acceptor.Listen(100);
  34. for (int i = 0; i < clientNum; i++)
  35. {
  36. TSocket socket = new TSocket(poller);
  37. await acceptor.AcceptAsync(socket);
  38. Response(socket);
  39. }
  40. this.barrier.RemoveParticipant();
  41. }
  42. private static async void Response(TSocket socket)
  43. {
  44. byte[] buffer = new byte[10];
  45. for (int i = 0; i < 10000; i++)
  46. {
  47. await socket.RecvAsync(buffer, 0, buffer.Length);
  48. Array.Reverse(buffer);
  49. await socket.SendAsync(buffer, 0, buffer.Length);
  50. }
  51. await socket.DisconnectAsync();
  52. }
  53. private async void Request(IPoller poller)
  54. {
  55. TSocket client = new TSocket(poller);
  56. for (int i = 0; i < 10000; i++)
  57. {
  58. await client.ConnectAsync("127.0.0.1", 10000);
  59. byte[] buffer = "0123456789".ToByteArray();
  60. await client.SendAsync(buffer, 0, buffer.Length);
  61. await client.RecvAsync(buffer, 0, buffer.Length);
  62. Assert.AreEqual("9876543210", buffer.ToStr());
  63. }
  64. Log.Debug("1111111111111111111111111111111111111");
  65. this.barrier.RemoveParticipant();
  66. }
  67. }
  68. }