Я использую сокеты для создания приложения чата C#, где пользователи могут подключаться к одному пользователю, который размещает сервер, и отправлять ему сообщения.Создание приложения чата
Проблема в том, что: пока пользователи могут отправлять данные на сервер, а данные будут отображаться на сервере, данные НЕ будут отображаться другим пользователям, чьи клиенты подключены к серверу.
Текущий чат - это простая передача пакетов TCP-протокола. Единственная проблема - отправка данных обратно клиенту.
Итак, мой вопрос в том, как я могу сделать серверы широковещательными сообщениями для всех клиентов?
namespace Client
{
class Program
{
static Socket sck;
static void Main(string[] args)
{
sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
sck.Connect(localEndPoint);
Console.Write("Enter Text: ");
string text = Console.ReadLine();
byte[] data = Encoding.ASCII.GetBytes(text);
sck.Send(data);
Main(args);
}
}
}
namespace Server
{
class Program
{
static byte[] Buffer { get; set; }
static byte[] formatted;
static Socket sck;
static void Main(string[] args)
{
listen();
}
public static void listen()
{
sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sck.Bind(new IPEndPoint(0, 1234));
sck.Listen(1);
Socket accepted = sck.Accept();
Buffer = new byte[accepted.SendBufferSize];
int bytesRead = accepted.Receive(Buffer);
formatted = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++)
{
formatted[i] = Buffer[i];
}
string strData = Encoding.ASCII.GetString(formatted);
Console.Write(strData + "\r\n");
sck.Close();
accepted.Close();
listen();
}
}
}
Вам нужно будет сохранить список подключенных клиентов, т. Е. «Список» или настраиваемую структуру, а затем выполнить итерацию по коллекции и «.Отправить» сообщение всем клиентам. –
listen() рекурсивный? Это не закончится хорошо ... –
@darren вам следует ответить на этот вопрос, а не комментировать, потому что ваш ответ правильный. – Liran