VB.NET网络流读取方法没有读取正确的字节数

时间:2014-12-16 16:41:35

标签: arrays vb.net byte networkstream

所以我正在创建一个类似于网络监控工具的软件,它允许用户查看连接到它的其他计算机的屏幕。我使用网络流将图像/屏幕截图作为字节数组发送,并且每次写入流都包含一个标题,其中包含数据的标识符(数据是什么)以及包含4个字节的数据长度(长度为data - 标题长度。

以下是客户端发送屏幕截图的几行代码: (请记住,此代码在其自己的线程上,每400毫秒休眠一次。)

If not ImageBytes.SequenceEqual(LastImageBytes) Then
'RESIZES ARRAY TO CUT ALL 0'S OFF THE END INSTEAD OF WRITING THEM TO THE STREAM.
'THE 6 BYTES INCLUDE THE HEADER AND THE CLIENT ID (FOR IDENTIFYING WHERE THE IMAGE CAME ROM) 
Array.Resize(PrepBytes, ImageBytes.Count + 6)
ScreenStream.Write(PrepBytes,0, PrepBytes.Count)
LastImageBytes = ImageBytes
End If

以下是我用来阅读屏幕截图的代码:

'COLLECT DATA HEADER
Dim HeaderBytes(4) As Byte
NetStream.Read(HeaderBytes, 0, 5)

'SPLIT DATA HEADER
Dim Identifier As Integer = HeaderBytes(0)
Dim BytesToRead As Integer = BitConverter.ToInt32(HeaderBytes, 1)

Dim RecData(300000) As Byte
Dim BytesRead As Integer = 0
Dim RemainingToRead As Integer = BytesToRead

Do Until BytesRead = BytesToRead
   BytesRead += NetStream.Read(RecData, BytesRead, RemainingToRead)
   RemainingToRead -= BytesRead
Loop

我收到的屏幕截图不再被破坏,但网络流中似乎有多余的数据,因为当收到屏幕截图并且线程回到第一行时,屏幕截图中的一些数据被放入HeaderBytes,当它应该已经全部阅读过......

如果你能提供帮助,我会很感激,我一直在研究这个问题已经有一段时间了,更糟糕的是我偶尔会遇到致命的引擎执行错误,这是我无法理解的。

感谢。

0 个答案:

没有答案
相关问题