Українська
Типові помилки
Типові помилки
У табл. 9.4 наведено помилки, яких найчастіше припускаються під час програмування сокетів.
Таблиця 9.4. Типові помилки під час роботи із сокетами
| Проблема | Причина | Виправлення |
|---|---|---|
| клієнт і сервер «зависають», дані не приходять | StreamWriter без AutoFlush тримає рядок у буфері | AutoFlush = true або await writer.FlushAsync() |
| перший рядок на сервері починається з невидимого символу | Encoding.UTF8 у StreamWriter надсилає BOM | new UTF8Encoding(false) |
| повідомлення «злипаються» або приходять частинами | TCP – потік байтів без меж повідомлень | розділювач \n, префікс довжини, ReadExactlyAsync |
SocketException 10061 actively refused | сервер не запущено або інший порт чи адреса | запустити сервер, перевірити порт командою Get-NetTCPConnection |
| з іншого комп’ютера підключитися не вдається | сервер слухає 127.0.0.1 або блокує брандмауер | IPAddress.Any, дозвіл у брандмауері для приватної мережі |
| сервер обслуговує лише одного клієнта | цикл прийому чекає завершення обміну з клієнтом | окрема задача ServeAsync для кожного клієнта |
| перемішані повідомлення в розсилці | одночасний запис у потік з кількох задач | SemaphoreSlim або черга повідомлень на клієнта |
| вікно Windows Forms не реагує | синхронні Read, Accept у потоці інтерфейсу | асинхронні методи з await |