我正在创建简单的代理服务器,但我遇到了一个奇怪的情况,我有以下代码:
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)读到底。我还有其他方法来处理这种情况吗?