Многопользовательский чат - C#

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

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

Подскажите, как в таком чате сделать так, чтобы к серверу могли подключаться несколько клиентов, и сообщения получаемые сервером, рассылались всем клиентам? Сервер
Листинг программы
  1. using System;
  2. using System.Text;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Threading;
  6. namespace SocketServer
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. // Устанавливаем для сокета локальную конечную точку
  13. IPHostEntry ipHost = Dns.GetHostEntry("localhost");
  14. IPAddress ipAddr = ipHost.AddressList[0];
  15. IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);
  16. // Создаем сокет Tcp/Ip
  17. Socket sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  18. // Назначаем сокет локальной конечной точке и слушаем входящие сокеты
  19. try
  20. {
  21. sListener.Bind(ipEndPoint);
  22. sListener.Listen(10);
  23. // Начинаем слушать соединения
  24. while (true)
  25. {
  26. Console.WriteLine("Ожидаем соединение через порт {0}", ipEndPoint);
  27. // Программа приостанавливается, ожидая входящее соединение
  28. Socket handler = sListener.Accept();
  29. string data = null;
  30. // Мы дождались клиента, пытающегося с нами соединиться
  31. byte[] bytes = new byte[1024];
  32. int bytesRec = handler.Receive(bytes);
  33. data += Encoding.UTF8.GetString(bytes, 0, bytesRec);
  34. // Показываем данные на консоли
  35. Console.Write("Полученный текст: " + data + "\n\n");
  36. // Отправляем ответ клиенту
  37. string reply = "Спасибо за запрос в " + data.Length.ToString()
  38. + " символов";
  39. byte[] msg = Encoding.UTF8.GetBytes(reply);
  40. handler.Send(msg);
  41. if (data.IndexOf("<TheEnd>") > -1)
  42. {
  43. Console.WriteLine("Сервер завершил соединение с клиентом.");
  44. break;
  45. }
  46. handler.Shutdown(SocketShutdown.Both);
  47. handler.Close();
  48. }
  49. }
  50. catch (Exception ex)
  51. {
  52. Console.WriteLine(ex.ToString());
  53. }
  54. finally
  55. {
  56. Console.ReadLine();
  57. }
  58. }
  59. }
  60. }
Клиент
Листинг программы
  1. using System;
  2. using System.Text;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Threading;
  6. namespace SocketClient
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. try
  13. {
  14. SendMessageFromSocket(11000);
  15. }
  16. catch (Exception ex)
  17. {
  18. Console.WriteLine(ex.ToString());
  19. }
  20. finally
  21. {
  22. Console.ReadLine();
  23. }
  24. }
  25. static void SendMessageFromSocket(int port)
  26. {
  27. // Буфер для входящих данных
  28. byte[] bytes = new byte[1024];
  29. // Соединяемся с удаленным устройством
  30. // Устанавливаем удаленную точку для сокета
  31. IPHostEntry ipHost = Dns.GetHostEntry("localhost");
  32. IPAddress ipAddr = ipHost.AddressList[0];
  33. IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);
  34. Socket sender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  35. // Соединяем сокет с удаленной точкой
  36. sender.Connect(ipEndPoint);
  37. Console.Write("Введите сообщение: ");
  38. string message = Console.ReadLine();
  39. Console.WriteLine("Сокет соединяется с {0} ", sender.RemoteEndPoint.ToString());
  40. byte[] msg = Encoding.UTF8.GetBytes(message);
  41. // Отправляем данные через сокет
  42. int bytesSent = sender.Send(msg);
  43. // Получаем ответ от сервера
  44. int bytesRec = sender.Receive(bytes);
  45. Console.WriteLine("\nОтвет от сервера: {0}\n\n", Encoding.UTF8.GetString(bytes, 0, bytesRec));
  46. // Используем рекурсию для неоднократного вызова SendMessageFromSocket()
  47. if (message.IndexOf("<TheEnd>") == -1)
  48. SendMessageFromSocket(port);
  49. // Освобождаем сокет
  50. sender.Shutdown(SocketShutdown.Both);
  51. sender.Close();
  52. }
  53. }
  54. }

Решение задачи: «Многопользовательский чат»

textual
Листинг программы
  1. handler.Shutdown(SocketShutdown.Both);
  2. handler.Close();

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


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

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

13   голосов , оценка 4.154 из 5

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

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

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