gpt4 book ai didi

c# - NetworkStream 截断了我的数据?

转载 作者:行者123 更新时间:2023-11-30 13:36:59 26 4
gpt4 key购买 nike

在同一台计算机上,我有 2 个控制台应用程序。 (客户端向服务器发送文件)

在开始之前,我只想提一下我正在使用这两个 async 函数:

NetworkStream 读取:

 public static Task<int> ReadAsync1(this NetworkStream networkStream, byte[] buffer, int offset, int size)
{
return Task<int>.Factory.FromAsync(networkStream.BeginRead, networkStream.EndRead, buffer, offset, buffer.Length, networkStream);
}

写入 NetworkStream:

   public static Task WriteAsync1(this NetworkStream networkStream, byte[] buffer, int offset, int size)
{
return Task.Factory.FromAsync(networkStream.BeginWrite, networkStream.EndWrite, buffer, offset, buffer.Length, networkStream);
}

我的客户端代码:

(让我们拿一个我知道它大小的简单文件)

enter image description here

我的发送代码:

 NetworkStream ns = socketForServer.GetStream();
ns.WriteAsync1(File.ReadAllBytes(@"c:\r\1.jpg"), 0, 1593899);
ns.Flush();

我的服务器代码:(读...)

byte[] d = new byte[1593899];
networkStream.Read(d, 0, d.Length);
File.WriteAllBytes(@"c:\r\2.jpg",d);

结果:

2.jpg 写成:

enter image description here

那么问题出在哪里呢?

2.jpg 已损坏!当我尝试打开图像时,我看到了这个:

enter image description here

(而不是与 1.jpg 相同的图像)

所以我去看看“HEX”有什么问题:

我发现过了一会儿-它写的都是零:

larger iamge

enter image description here

问题

我做错了什么?我怎样才能修复代码以便发送整个文件?

最佳答案

看起来您的客户端代码没有读完全部内容:您应该有一个循环,在检查内容之前读到最后:

int remaining = d.Length;
int pos = 0;
while (remaining != 0) {
int add = networkStream.Read(d, pos, remaining);
pos += add;
remaining -= add;
}

目前,您的代码读取的数据与网络流选择的最初可供您使用的数据一样多,并且在不检索其余字节的情况下停止。

关于c# - NetworkStream 截断了我的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27630028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com