У меня проблемы с http-запросами, которые «иногда» не выполняются.
var bodyBuilder = new List<byte>(4096);
var buffer = new byte[256];
while (socket.Available > 0) {
var responseLength = socket.Receive(buffer, buffer.Length, SocketFlags.None);
for (var i = 0; i < responseLength; i++)
bodyBuilder.Add(buffer[i]);
if (responseLength == 0)
break; // never true btw
}
Я прочитал, что socket.Available > 0
не следует использовать, поскольку он не указывает, закончен ли сокет или нет, но"если есть данные на этот раз" https://www.coderanch.com/how-to/java/AvailableDoesntDoWhatYouThinkItDoes (хотя не на C # и не на сокетах)
Это имеет смысл, потому что я получаю исключения при попытке разобрать ответ.Даже при ручном прохождении отладчика данные поступают правильно, потому что я делаю это медленно, когда перехожу через
. Решение было бы заменить while (socket.Available > 0)
на while (true)
, поскольку responseLength будетбыть 0, когда сервер закрывает соединение.(согласно многим источникам) Но это НЕ то, что происходит.Если я выполню socket.Recieve()
и нет доступных данных.Сокет просто блокируется на неопределенный срок.
Любая помощь?