Полагаю, это не работает из-за того, что StreamReader не является потокобезопасным (не знаю, как это исправить, Google не поможет)
В любом случае, я пытался понять, что именно не так с этим кодом, он работает 80% времени, в других случаях он не может анализировать входящие пакеты и просто отбрасывает их.
Это пустота для http-подобного tcp-сервера, который я пишу. он работает точно так же, как http-пакет, но заголовок «CONTENT-LENGTH» сообщает ему длину данных пакета (полезную нагрузку). Это где проблема происходит. Может кто-нибудь предложить мне, как улучшить это и исправить это? потому что я полностью потерян.
void InternalStart()
{
bool continueWhile = true;
while (continueWhile)
{
if (SR.EndOfStream)
{
continueWhile = false;
break;
}
if (par_ReadStatus != ReadStatusEnum.WaitingForPayload)
{
int charCode = SR.Peek();
if (charCode == -1)
{
continueWhile = false;
break;
}
string outputLine = "";
outputLine = SR.ReadLine();
ReadLine(outputLine);
}
else if (par_ReadStatus == ReadStatusEnum.WaitingForPayload)
{
int length = int.Parse(par_ParsingPacket.Attributes["CONTENT-LENGTH"]);
char[] array = new char[length];
for (int i = 0; i < length; i++)
{
array.SetValue(Convert.ToChar(SR.Read()), i);
}
string payload = new string(array);
ReadLine(payload);
}
}
if (ReadEnd != null)
{
ReadEnd();
}
}