Итак, я пытаюсь создать приложение чата, но я новичок в сокетах. Я следовал руководству по созданию сервера и клиента, однако сервер не передает данные, отправленные с одного клиента, каждому клиенту, подключенному к нему. Вместо этого он только передает его клиенту, который отправил данные.
Я попытался добавить каждого клиента, который присоединяется к серверу, в список, а затем с помощью цикла foreach
отправить данные, полученные от одного клиента, каждому клиенту в списке. Это, однако, не сработало. Я подозреваю, что ошибка в цикле foreach
, но я не совсем уверен.
Вот мой код для сервера:
class Program
{
public static List<Socket> connectedClient = new List<Socket>();
public static Socket clientSocket = default(Socket);
static void Main(string[] args)
{
int port = 13000;
string IpAddress = "127.0.0.1";
Socket serverListener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ep = new IPEndPoint(IPAddress.Parse(IpAddress), port);
serverListener.Bind(ep);
serverListener.Listen(0);
Console.WriteLine("Server running");
Program p = new Program();
int counter = 0;
while (true)
{
counter++;
clientSocket = serverListener.Accept();
connectedClient.Add(clientSocket);
Console.WriteLine(counter + " Client joined");
Thread clientThread = new Thread(new ThreadStart(() =>
p.User(clientSocket)));
clientThread.Start();
}
}
public void User(Socket client)
{
while (true)
{
byte[] msg = new byte[1024];
int size = client.Receive(msg);
Console.WriteLine("Client>> " +
System.Text.Encoding.ASCII.GetString(msg, 0, size));
//the loop that i tried to implement
foreach(Socket clientSocket in connectedClient)
{
client.Send(msg, 0, size, SocketFlags.None);
}
}
}
}
Вместо того, чтобы сообщение транслировалось один раз всем клиентам, сервер отправляет сообщение обратно клиенту, который его отправил, но во сколько раз число клиентов.
Например: если к серверу подключено 4 клиента и один клиент отправляет сообщение "Hello"
, сервер отправит обратно "HelloHelloHelloHello"
, но только клиенту, отправившему "Hello"
.