繁体   English   中英

C#套接字编程问题[接收文件的哈希值不同]

[英]C# socket programming problem [receive file has a different hash]

我有套接字程序,它将套接字客户端中文件发送到套接字服务器,并在服务器上创建文件

将文件发送到服务器没有问题 ... [未损坏]

但,

我的代码是:(服务器侦听和接收数据)

this.buffer = new byte[1000000];
 this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None);

因此,总是从客户端到 服务器接收到1000000字节,这总是在服务器中创建的文件的固定大小值也大于原始文件。

最模糊的是文件MD5哈希不同...因为我认为这个固定缓冲区

我的问题是我如何无法使用相同的MD5哈希将文件发送到服务器

无需在缓冲区上发疯,您可以分批阅读。 您还可以使用MemoryStream在以下情况下接收到的所有信息:

MemoryStream MemStream = new MemoryStream();
this.buffer = new byte[1024];

int BytesRead = this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None);
while (BytesRead > 0)
{
  MemStream.Write(this.buffer, 0, this.buffer.Length);
  BytesRead = this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None);
}

我认为这可能是因为MD5是使用您创建的整个缓冲区开始创建的。 如果数据只有50000字节长,但缓冲区是1000000,我认为它们会创建不同的哈希值。

如果我没有记错的话,receive方法会返回一个int值,该值应该是您接收到的数据的大小。 您可以创建一个新的字节数组,然后将接收到的数据复制到与原始文件大小完全相同的数组中。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM