Advertisement
Guest User

TcpListener

a guest
Apr 13th, 2021
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.70 KB | None | 0 0
  1.     public class AsyncService
  2.     {
  3.         private static Logger logger = LogManager.GetCurrentClassLogger();
  4.         private IPAddress listenerAddress;
  5.         private int listenerPort;
  6.         private Func<string, string> respond;
  7.  
  8.         public AsyncService(IPAddress address, int port, Func<string, string> func)
  9.         {
  10.             listenerAddress = address;
  11.             listenerPort = port;
  12.             respond = func;
  13.         }
  14.  
  15.         public async void Run()
  16.         {
  17.             TcpListener listener = new TcpListener(listenerAddress, listenerPort);
  18.             listener.Server.ReceiveTimeout = 5000;
  19.             listener.Server.ReceiveBufferSize = 65536;
  20.             listener.Start();
  21.             logger.Info(String.Format("Сервер запущен на {0}:{1}", listenerAddress, listenerPort));
  22.             while (true)
  23.             {
  24.                 try
  25.                 {
  26.                     TcpClient tcpClient = await listener.AcceptTcpClientAsync();
  27.                     Task t = Process(tcpClient);
  28.                     await t;
  29.                 }
  30.                 catch (Exception ex)
  31.                 {
  32.                     logger.Error(ex);
  33.                 }
  34.             }
  35.         }
  36.  
  37.         private async Task Process(TcpClient tcpClient)
  38.         {
  39.             string clientEndPoint = tcpClient.Client.RemoteEndPoint.ToString();
  40.             logger.Info("Подключение с адреса " + clientEndPoint);
  41.             try
  42.             {
  43.                 string request;
  44.                 byte[] data = new byte[tcpClient.ReceiveBufferSize];
  45.                 using (NetworkStream stream = tcpClient.GetStream())
  46.                 {
  47.                     using (MemoryStream ms = new MemoryStream())
  48.                     {
  49.                         int numBytesRead;
  50.                         while ((numBytesRead = await stream.ReadAsync(data, 0, data.Length)) > 0)
  51.                         {
  52.                             ms.Write(data, 0, numBytesRead);
  53.                         }
  54.                         request = Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length);
  55.                     }
  56.  
  57.                     string response = respond.Invoke(request);
  58.                     logger.Info("Отправка ответа");
  59.                     logger.Info(response + "\r\n");
  60.                     data = Encoding.UTF8.GetBytes(response);
  61.                     await stream.WriteAsync(data, 0, data.Length);
  62.                 }
  63.             }
  64.             catch (Exception ex)
  65.             {
  66.                 logger.Error(ex);
  67.             }
  68.             finally
  69.             {
  70.                 if (tcpClient.Connected)
  71.                     tcpClient.Close();
  72.             }
  73.         }
  74.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement