检查字节数组是否已通过 TCP 连接完全发送 c#
check if byte array is fully sent through TCP connection c#
我有一个位图,我使用 BinaryFormatter
和 MemoryStream
将其转换为字节,然后将字节发送到 TCP 服务器,当我尝试将其转换回 BitMap
I收到此错误 System.Runtime.Serialization.SerializationException: End of Stream encountered before parsing was completed.
我尝试将位图转换为字节,然后在客户端将字节转换为位图,只是为了检查错误是否由转换引起,但一切正常。所以我认为问题是服务器正在接收块中的数组字节,而不是在 1 个大数组中,所以我的问题是如何检查字节数组是否已完全发送?
正如您所说,数据绝对可以分多个块发送,您需要有一种方法知道何时收到所有数据。对于 HTTP,您在 header 中使用 Content-Length 来让客户端知道何时收到所有数据。由于您控制双方,您可以将图像转换为字节数组,检查大小并假设其 5000 字节。
然后你创建一个 int(或者 long,如果需要的话,在这种情况下可能不是)并将它设置为 5000 并首先发送它(作为字节),然后发送其余数据。然后您将创建自己的 header。另一方面,您首先读取 int 的确切字节数(如果您选择 long 等,则读取其他字节)。然后将字节转换为 int,您知道它现在将达到 5000 字节。然后开始阅读,直到你有 5000 个字节。这始终可以优化,但这是一种简单的方法。
我有一个位图,我使用 BinaryFormatter
和 MemoryStream
将其转换为字节,然后将字节发送到 TCP 服务器,当我尝试将其转换回 BitMap
I收到此错误 System.Runtime.Serialization.SerializationException: End of Stream encountered before parsing was completed.
我尝试将位图转换为字节,然后在客户端将字节转换为位图,只是为了检查错误是否由转换引起,但一切正常。所以我认为问题是服务器正在接收块中的数组字节,而不是在 1 个大数组中,所以我的问题是如何检查字节数组是否已完全发送?
正如您所说,数据绝对可以分多个块发送,您需要有一种方法知道何时收到所有数据。对于 HTTP,您在 header 中使用 Content-Length 来让客户端知道何时收到所有数据。由于您控制双方,您可以将图像转换为字节数组,检查大小并假设其 5000 字节。 然后你创建一个 int(或者 long,如果需要的话,在这种情况下可能不是)并将它设置为 5000 并首先发送它(作为字节),然后发送其余数据。然后您将创建自己的 header。另一方面,您首先读取 int 的确切字节数(如果您选择 long 等,则读取其他字节)。然后将字节转换为 int,您知道它现在将达到 5000 字节。然后开始阅读,直到你有 5000 个字节。这始终可以优化,但这是一种简单的方法。