Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. namespace ServerEcho
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. const int port = 5555;
  8.  
  9. var server = new Server();
  10.  
  11. server.Work(port).Wait();
  12. }
  13. }
  14. }
  15.  
  16. using System.IO;
  17. using System.Net;
  18. using System.Net.Sockets;
  19. using System.Threading.Tasks;
  20.  
  21. namespace ServerEcho
  22. {
  23. /// <summary>
  24. /// Класс, предоставляющий возможность создания сервера и корректной обработки
  25. /// запросов, поступающих с клиента.
  26. /// </summary>
  27. public class Server
  28. {
  29. /// <summary>
  30. /// Главный метод, реализующий логику работы сервера.
  31. /// При попытке подключения клиента создается и запускается новый Task,
  32. /// в котором выполняется обработка запросов, поступающих с клиента.
  33. /// </summary>
  34. /// <param name="port">Номер порта.</param>
  35. public async Task Work(int port)
  36. {
  37. var listener = new TcpListener(IPAddress.Any, port);
  38. listener.Start();
  39.  
  40. while (true)
  41. {
  42. var socket = await listener.AcceptSocketAsync();
  43. var manager = new Task(clientSocket => ManageRequest((Socket)clientSocket), socket);
  44. manager.Start();
  45. }
  46. }
  47.  
  48. /// <summary>
  49. /// Метод позволяет корректно обрабатывать команды подключившегося клиента.
  50. /// Распознает тип команды и вызывает метод, требуемый для выполнения задачи.
  51. /// </summary>
  52. private async void ManageRequest(Socket socket)
  53. {
  54. var stream = new NetworkStream(socket);
  55.  
  56. var reader = new StreamReader(stream);
  57. var request = await reader.ReadLineAsync();
  58.  
  59. while (request != "exit")
  60. {
  61. System.Console.WriteLine(request);
  62.  
  63. var writer = new StreamWriter(stream);
  64.  
  65. await writer.WriteLineAsync(request);
  66. await writer.FlushAsync();
  67.  
  68. request = await reader.ReadLineAsync();
  69. }
  70.  
  71.  
  72. socket.Close();
  73. return;
  74. }
  75. }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement