У меня есть сетевой поток через TCP, который является потоком Zlib
в обоих направлениях (клиент к серверу и сервер к клиенту).Чтение из ZlibStream поверх NetworkStream, дающее проблемы с блокировкой в C# .Net
Для Zlib
, я использую последние Ionic.Zlib.dll
.
Для первых пакетов, которые отправляются/принимаются, он работает нормально, но при получении третьего пакета или около того он начинает плохо себя вести.
Каждая операция чтения на блоке ZlibStream
блокируется до тех пор, пока пакет не будет повторен другим концом.
Например:
// Where reader is a BinaryReader on the ZlibStream on the NetworkStream
int a = reader.ReadInt32(); // blocks until initial packet that is 12 bytes is received
int b = reader.ReadInt32(); // blocks until the packet is repeated
int c = reader.ReadInt32(); // blocks until the packet is repeated again
После этого кода, пакет фактически был отправлен в 3 раза и получил только один раз.
Почему это блокируется? Как я могу заставить его не блокировать и продолжать, как ожидалось?
Может ли промывка в Злибе иметь какое-либо отношение к ней? (Поток очищается после каждого пакета.)
Было бы полезно, если ваш отправил больше кода. Вы используете блокирующие чтения здесь, подумайте о том, как реорганизовать ваш код, чтобы использовать шаблоны async/await и асинхронные чтения (т. Е. ReadInt32Async). – Noseratio
Чтение асинхронно не решит мою проблему. – Codecat
Я имел в виду и чтение, и запись - оба конца, поэтому блоков нет. – Noseratio