开发者

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

I have socket program which sends a fi开发者_开发百科le from socket client to socket server and create the file on the server

There is no problem in sending the file to the server... [Not corrupted]

But,

Im my code : (Server listening and receive data )

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

So always 1000000 bytes are received from the client to server which always the file created in the server has a fix size value .. also larger than the original file.

most fuzzy thing is file MD5 hashes are different... because of this fixed buffer as i think

my problem is how i cant send the file to the server with the same MD5 Hash ?


There's no need to go crazy on the buffer, you can read it in portions. You can also use a MemoryStream to hold all the collected information while you receive it in:

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);
}


I think this may be because the MD5 is begin created with the entire buffer you have created. If the data is only 50000 bytes long but the buffer is 1000000 I assume these would create different hash values.

If I remember correctly the receive method returns an int which should be the size of the data that you have received. You could create a new byte array and copy the received data into an array which is the exact same size as the original file.

Hope this helps.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜