Асинхронный сервер на C# некорректно работает из-за одного if'a
Во-вторых, какую роль играет список id?
В третьих - возможно причина в этих строчках:
if (!willRaiseEvent)
AcceptCompleted(Sock, e);
Во-вторых, какую роль играет список id?
В третьих - возможно причина в этих строчках:
if (!willRaiseEvent)
AcceptCompleted(Sock, e);
1) просто сначала ClientNumber был приватным, потом я сделал его паблик, по-этому функция осталась, но не суть. ведь проблема не в этом.
2) в список id добавляется ClientNumber клиентов, которые отключились
private void SendAsync(SocketAsyncEventArgs e)
{
bool willRaiseEvent = Sock.SendAsync(e);
if (!willRaiseEvent) // если не удалось отправить сообщение пользователю, то вероятно, он отключился
{
srv.id.Add(ClientNumber); //добавляем его ClientNumber в список id
ProcessSend(e);
Console.WriteLine("Connection №"+ClientNumber);
}
}
3) А что в них изменить нужно? Вся загвоздка в методе public void SendToAll(string data, int number), если из него убрать проверку
if (Cl.ClientNumber != number), то сервер работает исправно, а вот с этой маленькой проверкой уже брыкается, но мне же нужно отправлять сообщение всем клиентам, кроме того, от которого сообщение пришло.
Что изменить нужно на вскидку мне сказать трудно. Это надо брать и разбираться в твоем коде с отладчиком - а мне есть чем заняться и кроме этого.
Вероятнее всего - сервер не может распознать завершение передачи от клиента - я бы на твоем месте создал бы функцию логгирования и тогда бы ты увидел что происходит непосредственно.
Что изменить нужно на вскидку мне сказать трудно. Это надо брать и разбираться в твоем коде с отладчиком - а мне есть чем заняться и кроме этого.
Вероятнее всего - сервер не может распознать завершение передачи от клиента - я бы на твоем месте создал бы функцию логгирования и тогда бы ты увидел что происходит непосредственно.
окай. чо-та придумаем