[英]Reading data from NetworkStream
我嘗試在NetworkStream上發送大量數據(圖像),但看起來單次Read
是不夠的-我想嘗試讀取NetworkStream上發送的所有數據,但我不知道如何去做。 另外,我想將此數據作為字節數組byte[]
。 任何想法如何做到這一點?
byte[] b = new byte[length];
int bytes = 0;
while (!GetNetworkStream().DataAvailable)
Thread.Sleep(20); // Some delay
bytes = GetNetworkStream().Read(b, 0, b.Length);
MemoryStream ms = new MemoryStream();
ms.Write(b, 0, bytes);
我也嘗試了下一個似乎無效的代碼:
using (NetworkStream stream = CommunicationHandler.GetStream())
{
byte[] data = new byte[1024];
using (MemoryStream ms = new MemoryStream())
{
int numBytesRead;
while ((numBytesRead = stream.Read(data, 0, data.Length)) > 0)
ms.Write(data, 0, numBytesRead);
}
}
如我所見,您在這里放入了一些自己創建的方法,我認為您在讀取數據時沒有任何問題。 您真正需要的是在新文件啟動時進行某種處理,因為您的套接字應該連續接收數據。
顯然,這取決於要使用的圖像格式以及要發送的圖像格式。 對於PNG文件,您應該閱讀此pdf文件的第12章。 特別是第12節。如果您按以下順序操作,則可以尋找簽名並從緩沖區中提取數據
(decimal) 137 80 78 71 13 10 26 10
(hexadecimal) 89 50 4e 47 0d 0a 1a 0a
(ASCII C notation) \211 P N G \r \n \032 \n
然后,您只需簡單地重新創建png文件。 您必須對發送的每種文件類型執行相同的操作。
如果您不關心文件的內容,則可以創建一些數據幀並將數據放入有效負載中(壓縮和加密)。 創建自己的簽名等等。 最簡單的示例是Modbus。 您可以在此處了解更多信息。
讀取tcp流的數據非常簡單。 只看這段代碼。
var receiveBufferSize = 512; // amount of bytes to read
try
{
var buffer = new byte[receiveBufferSize];
_tcpClient.GetStream().Read(buffer, 0, receiveBufferSize);
// handle the received data chunk
}
catch (Exception e)
{
// handle the error
Debug.WriteLine(ex.Message);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.