Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays VB.NET网络流读取方法读取的字节数不正确_Arrays_Vb.net_Byte_Networkstream - Fatal编程技术网

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

Arrays VB.NET网络流读取方法读取的字节数不正确,arrays,vb.net,byte,networkstream,Arrays,Vb.net,Byte,Networkstream,因此,我正在创建一个类似于网络监控工具的软件,它允许用户查看连接到它的其他计算机的屏幕。我使用networkstream以字节数组的形式发送图像/屏幕截图,每次对流的写入都包含一个标头,其中包含数据标识符(数据是什么)和包含在4个字节中的数据长度(数据长度-标头长度) 以下是客户端发送屏幕截图的几行代码: (请记住,此代码位于自己的线程上,每400毫秒休眠一次。) 下面是我用来阅读截图的代码: 'COLLECT DATA HEADER Dim HeaderBytes(4) As Byte Net

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

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

下面是我用来阅读截图的代码:

'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中,而这些数据本应全部读取

如果您能帮助我,我将不胜感激,我已经在这个问题上工作了一段时间了,更糟糕的是,我偶尔会遇到致命的引擎执行错误,我无法理解


谢谢。

当您读取标题时,您不会检查是否确实读取了5个字节。您似乎对其余的数据执行此操作。如果它不读取5个字节,则整个数组将填充0,因此BytesRead=0和BytesToRead=0,这样循环就不会运行。如果您有一个一个错误的关闭。去掉Offset变量并使用BytesRead+=NetStream.Read(RecData,BytesRead,BytesToRead-BytesRead)@Jamie.P它不是一个全有或全无的函数。它可能只读取了4个字节而不是5个字节。返回值是“”,而参数是您希望读取的字节数。至于您最近遇到的问题,我认为我们在这方面对您帮助不大。要么你计算错了要发送的数据量,要么你收到了多少数据,要么你发送了不应该发送的数据,或者以上所有的,可能还有其他的。正如Hans Passant所说,您需要调试来解决这个问题。从小处开始,这样你就能更好地看到正在发生的事情。。。
'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