2011-06-20 4 views
1

は私がソケットクライアントからファイルへのソケットサーバーを送信し、サーバーC#のソケットプログラミングの問題[ファイルが異なるハッシュを持って受け取る]

上のファイルを作成したソケットプログラムを持っていないがあります[未壊れ]サーバー ...

しかし、にファイルを送信で問題

イム私のコード:(サーバーのリスニングと受信データ)だから、常に1000000バイトは常にサーバーで作成したファイルは、固定サイズの値を持つサーバークライアントから受信され

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

..また、元のファイルよりも大きい。私は

私の問題は、私は同じMD5ハッシュでサーバーにファイルを送信傾ける方法だと思うよう

最もあいまいなものがあるため、この固定されたバッファの... MD5ハッシュが異なっているファイルのですか?

+0

'受信()'受信したバイトの長さをあなたに戻って手渡しする必要があります。これを使用して、格納しているファイルを切り捨てるか、ループを使用してEOF(またはEOS)が返されるまで読み込みを続けます。 –

+0

どのように私はEOFを検出できますか? – Sudantha

+0

さて、 'this.DataSocket'のデータ型から始めましょう。 –

答えて

1

これは、作成したバッファ全体でMD5が作成されるためです。データが50000バイトだけでバッファが1000000の場合、これらは異なるハッシュ値を作成すると仮定します。

私が正しく覚えていれば、受け取ったデータのサイズであるべきintを返します。新しいバイト配列を作成し、受信したデータを元のファイルとまったく同じサイズの配列にコピーすることができます。

これが役に立ちます。

+0

おかげで私はウルのアイデアとして問題を解決しました:-) – Sudantha

+0

+私のボーナスポイントも受け付けます;) – Sudantha

2

バッファに狂っている必要はありません。部分的に読むことができます。また、あなたがそれを受信しながら、すべての収集した情報を保持するために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); 
} 
+0

は、stuartmclarkのアイデアを助けてくれたように解決しました! – Sudantha

関連する問題