NetworkStream не поддерживает операции поиска
Я создаю простой прокси-сервер, но столкнулся со странной ситуацией, я написал следующий код:
var clientRequestStream = _tcpClient.GetStream();
var requestHeader = clientRequestStream.GetUtf8String();
GetUtf8String
это метод расширения дляStream
класс, который читает поток (содержитHttpRequest
заголовки). Мне нужно извлечь эти заголовки для доступа к хосту и запрошенному URL. После того, как чтение NetworkStream завершено. Мне нужно выполнить операцию поиска и установить ееclientRequestStream.Position = 0;
потому что я хочу прочитать этот поток и записать его на другой пультNetworkStream
.
Я не знаю, как мне решить эту проблему. Любой совет будет вам полезен.
Edit: Я также попытался скопировать NetworkStream в MemoryStream, а затем выполнить операцию поиска в MemoryStream. Нет исключения, но когда я хочу прочитать из NetworkStream, его буфер всегда всегда пуст.
Также я использовал отражатель, чтобы увидеть, что происходит внутриStream.CopyTo
, Смотрите ниже код:
private void InternalCopyTo(Stream destination, int bufferSize)
{
int num;
byte[] buffer = new byte[bufferSize];
while ((num = this.Read(buffer, 0, buffer.Length)) != 0)
{
destination.Write(buffer, 0, num);
}
}
Это то, что делает CopyTo. Даже если я используюCopyTo
Проблема до сих пор не решена. Потому что он читает источник (здесь NetworkStream) до конца. У меня есть другой способ справиться с этой ситуацией?