我正在创建简单的代理服务器,但我遇到了一个奇怪的情况,我有以下代码:
var clientRequestStream = _tcpClient.GetStream();
var requestHeader = clientRequestStream.GetUtf8String();
GetUtf8String
Stream
是读取流(包含HttpRequest
标题)的类的扩展方法。我需要提取这些标头以访问 Host 和 Requested Url。一旦读取 NetworkStream 完成。我需要执行 seek 操作并设置它clientRequestStream.Position = 0;
,因为我必须读取该流并将其写入另一个 remote 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
问题仍然没有解决。因为它将源(Here NetworkStream)读取到最后。我有另一种方法来处理这种情况吗?