[英]how to write the stream to memory stream?
public void doprocess(TcpClient client)
{
MemoryStream ms = new MemoryStream();
Stream clStream = client.GetStream();
byte[] buffer_1 = new byte[8192];
int count = clStream.Read(buffer_1, 0, buffer_1.Length);
while (count > 0)
{
ms.Write(buffer_1, 0, count);
//the below line doesn't gives response and code hangs here
count = clStream.Read(buffer_1, 0, buffer_1.Length);
}
}
有沒有其他方法可以將一個流寫入另一個流? 我想兩次使用這個Stream
,這就是我需要將它寫入MemoryStream
。
在.NET 4中,復制部分非常簡單:
MemoryStream ms = new MemoryStream();
client.GetStream().CopyTo(ms);
如果您不使用.NET 4,那么類似於您已經獲得的代碼基本上是相同的。
但請注意,此(以及任何其他嘗試)僅在網絡流已關閉時才起作用 - 否則Read
調用將阻止等待更多數據。 我懷疑你的問題是什么 - 這是一個根本問題。
如果你的網絡流沒有關閉,那么你還不清楚你真的希望它如何表現 - 如果“拆分”流的兩個讀者基本上讀取任何緩沖數據,但是然后阻塞直到有新數據? 當然,當從兩個流中讀取緩沖數據時,可以刪除緩沖數據。 如果這就是你所追求的,我認為.NET中沒有任何東西可以幫助你 - 而且它可能非常棘手。
如果你能給我們更多關於你想要做的事情(以及TcpClient連接到什么)的背景,那將真正有所幫助。
您的代碼掛起clStream.Read
的原因是因為您要從套接字讀取8192個字節,但另一方面沒有人寫入那么多字節。 所以客戶端就坐在那里等待另一方發送所需的字節數。 根據您嘗試通過TCP實現的協議,服務器必須有一些消息,它打算發送多少數據,以便客戶端事先知道並且只嘗試讀取那么多字節。
例如,在HTTP協議中,服務器在標頭中發送Content-Length標頭,以向客戶端指示將在主體中發送多少數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.