Member 13759064 Ответов: 1

Как остановить отключение всех клиентов от сервера.


Поэтому я создал клиент и сервер howerver всякий раз, когда я запускаю несколько клиентов, а затем закрываю 1 из них, другие клиенты отключаются, как только они пытаются отправить сообщение другим активным клиентам. Это может быть связано с ошибкой внутри моего кода, однако мне все еще не удается найти, в чем заключается проблема.

Всякий раз, когда я закрываю клиент, я вызываю этот код:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
  Socket_Client.Close();
}


Ниже приведена ссылка на другой пост, где я показал весь код, который я сейчас использую. Я создал пост на этом сайте, дающий больше информации о моей проблеме. Любая помощь будет очень признательна.

c# - отключение от сервера закрывает все остальные соединения, когда я пытаюсь отправить сообщение подключенному пользователю - переполнение стека[^]

Что я уже пробовал:

Я попытался найти проблему и обнаружил, что в этом методе
private void doChat()


Оба метода :
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);

                        dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
                        dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));

                        Console.WriteLine("From client - " + clNo + " : " + dataFromClient);
                        rCount = Convert.ToString(requestCount);
                        //ConnUsers.Add(clNo);
                        Program.broadcast(dataFromClient, clNo, true);


И метод улова срабатывает.

Вывод, который я получаю на сервере, который является консольным приложением, например

Сервер слушает
клиент1 зарегистрирован
клиент2 зарегистрирован
client3 зарегистрирован
клиент1 отключен
клиент2 говорит Эй
клиент2 отключен

Как показано в примере, когда 1 клиент отключен, он, кажется, закрывает все клиенты всякий раз, когда я пытаюсь отправить сообщение подключенным клиентам.

Любая помощь будет очень признательна. Я застрял на этой проблеме уже довольно давно, так как я новичок в кодировании с серверным / клиентским приложением.

F-ES Sitecore

Вы, кажется, закрывает соединение с клиентом после того, как вы называете startClient?

1 Ответов

Рейтинг:
2

Wendelius

Я не просматривал весь код, но смотрел на обработку исключений в doChat похоже, что при возникновении исключения вы предполагаете, что клиент отключился. Однако существует масса причин, по которым может возникнуть исключение.

Поэтому я предлагаю изменить обработку исключений так, чтобы вы сначала обрабатывали те исключения, к которым вы готовы. После этого обрабатывайте другие исключения, регистрируя или иным образом собирая и публикуя информацию об исключении. Приставка.WriteLine-это одна из возможностей, или вы можете использовать файл журнала, если хотите.