NetworkStream nie obsługuje operacji wyszukiwania
Tworzę prosty serwer proxy, ale napotkałem dziwną sytuację, mam następujący kod:
var clientRequestStream = _tcpClient.GetStream();
var requestHeader = clientRequestStream.GetUtf8String();
GetUtf8String
to metoda rozszerzenia dlaStream
klasa, która odczytuje strumień (zawieraHttpRequest
nagłówki). Muszę wyodrębnić te nagłówki, aby uzyskać dostęp do adresu URL hosta i żądanego. Po przeczytaniu NetworkStream jest zakończone. Muszę wykonać operację wyszukiwania i ustawić jejclientRequestStream.Position = 0;
ponieważ muszę odczytać ten strumień i zapisać go na innym pilocieNetworkStream
.
Nie wiem, jak mam rozwiązać ten problem. Wszelkie porady będą pomocne.
Edytować: Próbowałem również skopiować NetworkStream do MemoryStream, a następnie wykonać operację wyszukiwania na MemoryStream, nie ma wyjątku, ale gdy chcę odczytać z NetworkStream, jego bufor zawsze jest pusty.
Użyłem również reflektora, aby zobaczyć, co dzieje się w środkuStream.CopyTo
. Zobacz poniższy kod:
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);
}
}
To właśnie robi CopyTo. Nawet jeśli używamCopyTo
Problem jest nadal nierozwiązany. Ponieważ czyta źródło (Here NetworkStream) do końca. Mam inny sposób na poradzenie sobie z tą sytuacją?