シンプルなプロキシサーバーを作成していますが、奇妙な状況に直面しました.コードに従っています:
var clientRequestStream = _tcpClient.GetStream();
var requestHeader = clientRequestStream.GetUtf8String();
GetUtf8String
Stream
ストリームを読み込むクラス(HttpRequest
ヘッダーを含む)の拡張メソッドです。Host と Requested Url にアクセスするには、これらのヘッダーを抽出する必要があります。NetworkStream の読み取りが完了したら。clientRequestStream.Position = 0;
そのストリームを読み取って別のリモートに書き込む必要があるため、シーク操作を実行して設定する必要がありますNetworkStream
。
この問題をどのように解決すればよいかわかりません。アドバイスがあれば助かります。
編集: 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)を最後まで読み込んでいるからです。この状況を処理する別の方法はありますか?