【发布时间】:2012-07-31 21:08:17
【问题描述】:
我正在创建简单的代理服务器,但遇到了一个奇怪的情况,我有以下代码:
var clientRequestStream = _tcpClient.GetStream();
var requestHeader = clientRequestStream.GetUtf8String();
GetUtf8String 是Stream 类的扩展方法,它读取流(包含HttpRequest 标头)。我需要提取这些标头以访问 Host 和 Requested Url。一旦读取 NetworkStream 完成。我需要执行查找操作并设置其clientRequestStream.Position = 0;,因为我必须读取该流并将其写入另一个远程NetworkStream。
我不知道该如何解决这个问题。任何建议都会有所帮助。
编辑:我也尝试将NetworkStream复制到MemoryStream,然后对MemoryStream执行seek操作,没有例外,但是当我想从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)读取到最后。我有其他方法来处理这种情况吗?
【问题讨论】:
标签: c# .net sockets network-programming tcpclient