Пишу не большой веб сервис который будет отвечать на запрос браузера.
Как я понимаю что по правилам протокола HTTP при подключении браузер посылает на сервер заголовки, но как понять что браузер закончил передавать данные на сервер и ждет ответ от сервера?
Сейчас я делаю это вот так:
static string ReadMessage(SslStream sslStream)
{
byte[] buffer = new byte[8];
StringBuilder messageData = new StringBuilder();
int bytes = -1;
while (true)
{
bytes = sslStream.Read(buffer, 0, buffer.Length);
Decoder decoder = Encoding.UTF8.GetDecoder();
char[] chars = new char[decoder.GetCharCount(buffer, 0, bytes)];
decoder.GetChars(buffer, 0, bytes, chars, 0);
messageData.Append(chars);
if (messageData.ToString().IndexOf("\r\n\r\n") != -1)
{
break;
}
}
Console.WriteLine(messageData);
return messageData.ToString();
}
Но это не всегда работает правильно, иногда возникает исключение типа:
System.IO.IOException: "Не удается прочитать данные из транспортного соединения: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера."
Я так понимаю это происходит потому что программа пытается прочитать данные с сокета, а их там нет. Как мне прочитать данные правильно?