Многопользовательский чат на 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("Бла бла бла");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д