Сбой сокета сервера С# при отключении клиентского сокета во время отправкиC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Сбой сокета сервера С# при отключении клиентского сокета во время отправки

Сообщение Anonymous »

У меня есть консольное приложение в виде серверного сокета, которое передает сообщения всем подключенным клиентам, а также консольные приложения, где иногда, когда один клиент отключается, серверный процесс аварийно завершает работу, даже не вызывая никаких исключений, в то время как у меня повсюду есть блоки try/catch, но, похоже, это ошибка уровня Windows, поскольку она регистрирует одну ошибку в средстве просмотра событий (код исключения: 0xc0000005). Я заметил, что если я просто прокомментирую строку отправки сокета (в коде ниже), то сбой не произойдет. больше, где метод Send находится внутри цикла for, который отправляет сообщения всем клиентам за миллисекунды, поэтому мне просто интересно, как управлять этим ожидаемым сценарием, когда во время отправки клиенту клиент может отключиться, вот как выглядит мой код нравится:

Код: Выделить всё

//I have global collection for all connected clients
Dictionary Clients = new Dictionary();

// this method is called in milliseconds
void Broadcast(byte[] data)
{
List disconnected = new List();

foreach (KeyValuePair socket in Clients)
{
try
{
socket.Value.Send(data);
}
catch (Exception e)
{
IPEndPoint ep = (IPEndPoint) socket.Value.RemoteEndPoint;

disconnected.Add(ep.Port);
}
}

foreach(int port in disconnected)
{
Clients.Remove(port);
}
}
Вот полная информация об ошибке из средства просмотра событий:
Имя сбойного приложения: WindowsTerminal.exe, версия: 1.20 .2406.26001, отметка времени: 0x667c7d41
Имя сбойного модуля: Microsoft.Terminal.Control.dll, версия: 1.20.2406.26001, отметка времени: 0x667c7b85
Код исключения: 0xc0000005
Смещение ошибки: 0x0000000000006824
Идентификатор сбойного процесса: 0x0x198A0
Сбойное время запуска приложения: 0x0x1DAE0DAC3A16BAF
< strong>Путь сбойного приложения: C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.20.11781.0_x64__8wekyb3d8bbwe\WindowsTerminal.exe
Путь сбойного модуля: > C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.20.11781.0_x64__8wekyb3d8bbwe\Microsoft.Terminal.Control.dll
Идентификатор отчета: 691fa460-3fab-4b59 -9c44-42f7bfb136f4
Полное имя сбойного пакета: Microsoft.WindowsTerminal_1.20.11781.0_x64__8wekyb3d8bbwe
Сбойный пакет -относительный идентификатор приложения: App

Подробнее здесь: https://stackoverflow.com/questions/788 ... ng-sending
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему закрытие клиентского сокета вызывает два события epoll?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Почему закрытие клиентского сокета вызывает два события epoll?
    Anonymous » » в форуме Linux
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Получить имя процесса от клиентского сокета
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Сбой TCP-канала удаленного взаимодействия .NET Framework .NET Framework после обновления клиентского ПК W11 до круглосут
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Пользовательский интерфейс на стороне сервера против клиентского пользовательского интерфейса. Что лучше?
    Anonymous » » в форуме Php
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»