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

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

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

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

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

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

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


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

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

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

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

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

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