Я ломаю голову над этим.
У меня есть это приложение, которое состоит из 1 сервера и 2 клиентов, подключающихся к нему. 1 Клиент находится в той же локальной сети, что и сервер, второй клиент подключается через Интернет. Клиенты должны постоянно поддерживать соединение, потому что и сервер, и клиент должны иметь возможность отправлять данные по требованию. Чтобы предотвратить тайм-ауты, я посылаю несколько байтов назад и вперед каждые 5 секунд.
Эта настройка работала в течение многих лет, когда оба клиента работали на WinXP, а сервер - на Win10 (около года назад сервер был обновлен с XP до 10).
Поскольку 2 клиента были обновлены до Win10, у меня очень нестабильное TCP-соединение, которое случайно разрывается. Я добавил исключения брандмауэра и даже добавил папку приложения в список игнорирования Защитника Windows.
На данный момент я даже не могу определить, какая сторона на самом деле разрывает соединение, сервер или клиенты или что-то среднее.
На сервере я получаю эту ошибку (перевод с голландского):
System.IO.IOException: невозможно прочитать данные из транспортного соединения: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через определенный промежуток времени, или не удалось установить соединение, так как подключенный хост не смог ответить.
На клиентах я получаю:
System.IO.IOException: невозможно прочитать данные из транспортного соединения: установленное соединение было прервано программным обеспечением на хост-компьютере
Я гуглил и гуглил, и большинство говорят, что я должен использовать wireshark, чтобы отследить источник, так что я сделал, но не понимаю сетевой протокол достаточно, чтобы выяснить, что происходит.
Вот файл pcapng: https://drive.google.com/file/d/1NkP4dAWC7y9mvCYgKtcazB9Obk-TIYpK/view?usp=sharing