Отправка сообщения от сервера клиенту на консоль - C#

Узнай цену своей работы

Формулировка задачи:

Ребят, подскажите пожалуйста, в момент удачной записи данных в файл (на стороне сервера выполняется запись в файл), нужно клиенту от сервера отправить на консоль сообщение что все ОК, или ERROR, в случае непредвиденных событий.. В коде клиента в классе TcpWriter я определил метод Response(), а в коде сервера в классе ClientObjects в блоке try пишу:
Листинг программы
  1. string sendmsg = "Успешно";
  2. data = Encoding.Unicode.GetBytes(sendmsg);
  3. stream.Write(data, 0, data.Length);
В итоге мне в консоль клиента выводится только 1 раз сообщение "Успешно". А должно выводить: Успешно Успешно Успешно ........... Код сервера:
Листинг программы
  1. namespace Server
  2. {
  3. public class ClientObject
  4. {
  5. public TcpClient client;
  6. public ClientObject(TcpClient tcpClient)
  7. {
  8. client = tcpClient;
  9. }
  10. public void Process()
  11. {
  12. NetworkStream stream = null;
  13. try
  14. {
  15. stream = client.GetStream();
  16. byte[] data = new byte[64]; // буфер для получаемых данных
  17. while (true)
  18. {
  19. // получаем сообщение
  20. StringBuilder builder = new StringBuilder();
  21. int bytes = 0;
  22. do
  23. {
  24. bytes = stream.Read(data, 0, data.Length);
  25. builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
  26. }
  27. while (stream.DataAvailable);
  28. string message = builder.ToString() + "\r\n";
  29. Console.WriteLine("Записываю в log {0}", message);
  30. try
  31. {
  32. using (FileStream fstream = new FileStream("log.txt", FileMode.Append))
  33. {
  34. // преобразуем строку в байты
  35. byte[] array = Encoding.Default.GetBytes(message);
  36. // запись массива байтов в файл
  37. fstream.Write(array, 0, array.Length);
  38. //Console.WriteLine("Текст записан в файл");
  39. }
  40. }
  41. catch (Exception ex)
  42. {
  43. //
  44. // ERROR MESSAGE TO CLIENT
  45. //message = ex.Message;
  46. //data = Encoding.Unicode.GetBytes(message);
  47. //stream.Write(data, 0, data.Length);
  48. }
  49. string sendmsg = "Успешно";
  50. data = Encoding.Unicode.GetBytes(sendmsg);
  51. stream.Write(data, 0, data.Length);
  52. }
  53. }
  54. catch (Exception ex)
  55. {
  56. Console.WriteLine(ex.Message);
  57. }
  58. finally
  59. {
  60. if (stream != null)
  61. stream.Close();
  62. if (client != null)
  63. client.Close();
  64. }
  65. }
  66. }
  67. }
  68.  
  69. namespace Server
  70. {
  71. class Program
  72. {
  73. const int port = 8888;
  74. static TcpListener listener;
  75. static void Main(string[] args)
  76. {
  77. try
  78. {
  79. var aTimer = new System.Timers.Timer();
  80. //65454
  81. aTimer.Interval = 65500;
  82. aTimer.AutoReset = true;
  83. aTimer.Start();
  84. listener = new TcpListener(IPAddress.Parse("127.0.0.1"), port);
  85. listener.Start();
  86. aTimer.Elapsed += OnTimedEvent;
  87. Console.WriteLine("Ожидание подключений...");
  88. while (true)
  89. {
  90. TcpClient client = listener.AcceptTcpClient();
  91. ClientObject clientObject = new ClientObject(client);
  92. // создаем новый поток для обслуживания нового клиента
  93. Thread clientThread = new Thread(new ThreadStart(clientObject.Process));
  94. clientThread.Start();
  95. }
  96. }
  97. catch (Exception ex)
  98. {
  99. Console.WriteLine(ex.Message);
  100. }
  101. finally
  102. {
  103. if (listener != null)
  104. listener.Stop();
  105. }
  106. }
  107. private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
  108. {
  109. // Check file access
  110. //delete file's old content
  111. var file = new FileInfo("log.txt");
  112. try
  113. {
  114. //stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
  115. string[] lines = File.ReadAllLines(@"log.txt");
  116.  
  117. StringBuilder newLines = new StringBuilder();
  118. foreach (var line in lines)
  119. {
  120. var date = Convert.ToDateTime(line.Substring(line.IndexOf(' ') + 1));
  121. var currentTime = DateTime.Now;
  122. double minuts = -1;
  123. if(date>=currentTime.AddMinutes(minuts))
  124. {
  125. newLines.Append(line + "\r\n");
  126. }
  127. }
  128. Console.WriteLine("Cleaning...");
  129. using (FileStream fstream = new FileStream("log.txt", FileMode.Create))
  130. {
  131. // запись массива байтов в файл
  132. byte[] array = Encoding.Default.GetBytes(newLines.ToString() + "\r\n");
  133. fstream.Write(array, 0, array.Length);
  134. }
  135. }
  136. catch (IOException)
  137. {
  138. //the file is unavailable because it is:
  139. //still being written to
  140. //or being processed by another thread
  141. //or does not exist (has already been processed)
  142. }
  143. }
  144. }
  145. }
и код клиента
Листинг программы
  1. namespace Client
  2. {
  3. class TcpWriter
  4. {
  5. TcpClient client;
  6. NetworkStream stream;
  7. int packNum = 0;
  8. int maxPackNum;
  9. public TcpWriter(int port, string address, int maxPackNum)
  10. {
  11. client = new TcpClient(address, port);
  12. stream = client.GetStream();
  13. this.maxPackNum = maxPackNum;
  14. }
  15. public void Response()
  16. {
  17. byte[] data = new byte[64]; // буфер для получаемых данных
  18. StringBuilder builder = new StringBuilder();
  19. int bytes = 0;
  20. do
  21. {
  22. bytes = stream.Read(data, 0, data.Length);
  23. builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
  24. }
  25. while (stream.DataAvailable);
  26. string msg = builder.ToString();
  27. Console.WriteLine("Сервер: {0}", msg);
  28. }
  29. public void Run()
  30. {
  31. System.Timers.Timer myTimer = new System.Timers.Timer();
  32. myTimer.Elapsed += new ElapsedEventHandler(MessageEvent);
  33. myTimer.Interval = 1000;
  34. myTimer.Start();
  35. Response();
  36. }
  37. public void MessageEvent(object source, ElapsedEventArgs e)
  38. {
  39. string message = string.Format("{0}: {1}", packNum++, DateTime.Now);
  40. byte[] data = Encoding.Unicode.GetBytes(message);
  41. stream.Write(data, 0, data.Length);
  42. if (packNum > maxPackNum)
  43. {
  44. (source as System.Timers.Timer).Stop();
  45. client.Close();
  46. }
  47. }
  48. }
  49. }
  50.  
  51. namespace Client
  52. {
  53. class Program
  54. {
  55. static void Main(string[] args)
  56. {
  57. try
  58. {
  59. TcpWriter tcpWriter = new TcpWriter(8888, "127.0.0.1", 1000);
  60. tcpWriter.Run();
  61. }
  62. catch (Exception ex)
  63. {
  64. Console.WriteLine(ex.Message);
  65. }
  66. Console.ReadLine();
  67. }
  68. }
  69. }
Спасибо заранее!

Решение задачи: «Отправка сообщения от сервера клиенту на консоль»

textual
Листинг программы
  1.             for (; ; )
  2.                 Response();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы