Многопользовательский чат на socket. Не обновляется список пользователей - C#
Формулировка задачи:
пишу многопользовательский чат на socket (уже написал с wcf и он работает). сообщения обмениваются но список клиентов обновляется только у первого и у последнего а у остальных не обновляется. посмотрите пожалуйста где я ошибся или я все не правильно делаю?
код обновления списка клиентов
метод отправки
здесь в клиенте обновляю список клиентов
прикрепил проект
ChatSocket.rar
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)); } }
Решение задачи: «Многопользовательский чат на socket. Не обновляется список пользователей»
textual
Листинг программы
reader["SkoT"].ReadLine(); sWriter["SkoT"].WriteLine("Бла бла бла");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д