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

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

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

пишу многопользовательский чат на socket (уже написал с wcf и он работает). сообщения обмениваются но список клиентов обновляется только у первого и у последнего а у остальных не обновляется. посмотрите пожалуйста где я ошибся или я все не правильно делаю? код обновления списка клиентов
private void UpdateUsers(Socket sock)
        {
            List<byte> bytes = new List<byte>();
            bytes.AddRange(BitConverter.GetBytes((int)Commands.UpdateUsers));
            bytes.AddRange(BitConverter.GetBytes(clients.Count));
            foreach (var item in clients)
            {
                byte[] b = Encoding.UTF8.GetBytes(item.Key);
                bytes.AddRange(BitConverter.GetBytes(b.Length));
                bytes.AddRange(b);
            }
 
            if (sock == null)
                foreach (var item in clients)
                {
                    Send(item.Value, bytes);
                }
            else
                Send(sock, bytes);
        }
метод отправки
private void Send(Socket socket, List<byte> bytes)
        {
            byte[] b = BitConverter.GetBytes(bytes.Count);
            bytes.InsertRange(0, b);
            socket.Send(bytes.ToArray());
        }
здесь в клиенте обновляю список клиентов
private void UpdateUsers(byte[] bytes)
        {
            int pos = 4;
            int count = BitConverter.ToInt32(bytes, pos); pos += 4;
 
            List<string> users = new List<string>();
 
            for (int i = 0; i < count; i++)
            {
                int ln = BitConverter.ToInt32(bytes, pos); pos += 4;
                string name = Encoding.UTF8.GetString(bytes, pos, ln); pos += ln;
                users.Add(name);
            }
 
            var handler = Interlocked.CompareExchange(ref this.UpdateUsersList, null, null);
 
            if (handler != null)
            {
                handler(this, new ChatArgs(true, users));
            }
        }
прикрепил проект ChatSocket.rar

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

textual
Листинг программы
reader["SkoT"].ReadLine();
sWriter["SkoT"].WriteLine("Бла бла бла");

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


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

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

5   голосов , оценка 4.6 из 5
Похожие ответы