如何在不使用 BinaryWriter/Reader 的情况下将 TCP 流的大小嵌入或告知接收器?
必须有一种快速的方法让它知道它是否已经到达终点,当然,除了终止连接。
tcp.GetStream().Write(ms.GetBuffer(), 0, (int)ms.Length);
Run Code Online (Sandbox Code Playgroud)
我是这样发送的,但接收是困难的部分。
编辑:
这对我不起作用:
while (tt1.GetStream().DataAvailable)
{
su = Image.FromStream(tt1.GetStream());
}
Run Code Online (Sandbox Code Playgroud)
不,没有办法(快或慢)告诉您何时到达网络流的末尾。DataAvailable会告诉您当前是否有数据可用,但它无法告诉您是否可能有更多数据流出。
我知道有两种可靠的方法可以确定您是否已到达网络流的末尾:
换句话说,网络流无法知道它何时结束。不像文件流可以。您必须对数据中的流长度或流结束标记进行编码。
System.Drawing.Image.FromStream 的文档说:
如果使用相同的流连续调用此方法,则流将重置为零。
因此,您不能使用该方法从同一流中读取多个图像。
我怀疑您需要做的是更改数据,使其结构如下:
length | data for image 1 | length | data for image 2 | 0
Run Code Online (Sandbox Code Playgroud)
然后您将读取长度,将那么多字节读入一个字节数组,并从该字节数组创建图像(可能通过在其周围包裹一个内存流),然后读取下一个长度、下一个字节块等。 , 直到读取长度为 0,这表示流结束。
| 归档时间: |
|
| 查看次数: |
4031 次 |
| 最近记录: |