我创建简单的代理服务器,但我遇到一个奇怪的现象,我下面的代码:的NetworkStream不支持查找操作
var clientRequestStream = _tcpClient.GetStream();
var requestHeader = clientRequestStream.GetUtf8String();
GetUtf8String
是Stream
类读取流的扩展方法(包含HttpRequest
标题)。我需要提取这些标题才能访问主机和请求的网址。一旦阅读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
问题仍然没有解决。因为它读源(Here NetworkStream)到最后。我有另一种方式来处理这种情况?
乔恩我没有复制NetworkStream到MemoryStream,但是当我想读取缓冲区总是空的。 – saber 2012-07-31 21:17:28
Jon我也测试过CopyTo,但是需要一天的时间将缓冲区复制到MemoryStream。我不知道为什么。 – saber 2012-07-31 21:24:57
@SaberAmani:那么网络流中有什么?如果服务器保持连接打开,它将不会完成复制。至于你的第一条评论 - 这将表明你没有正确地复制数据。很难说如何没有看到你的代码。 – 2012-07-31 22:41:14