テキストファイルは問題ないようです。ファイルを送信するために使用されるコードは次のとおりです。
System.IO.FileStream stream = new System.IO.FileStream(file, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);
double done = 0;
double tot = info.Length;
double chunk = 8096;
while (done < tot)
{
if (chunk > tot - done)
{
chunk = tot - done;
}
Byte[] buffer = new Byte[(int)chunk];
reader.Read(buffer,(int)done,(int)chunk);
sock.Send(buffer);
done += chunk;
statusTxt.Text = Math.Round(done / tot * 100, 2).ToString() + "%";
}
ファイルを受け取るコードは非常によく似ています。
private void ReceiveFile(string file, Socket sock,double size)
{
while (done < size)
{
if (chunk > (size - done))
{
chunk = size - done;
}
Byte[] buffer = new Byte[(int)chunk];
int count = sock.Receive(buffer);
writer.Write(buffer);
done += count;
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate()
{
foreach (TextBlock block in files.Items)
{
if (block.Tag.ToString() == file)
{
block.Text = "Uploading " + file + "... 0% ("+done.ToString()+"/" + size.ToString() + ")";
}
}
});
}
writer.Flush();
writer.Close();
}
画像アーティファクトに関する多くの投稿を見てきましたが、すべての問題はバイトがテキストにエンコードされることに対処していました。私はその問題を回避したと信じています。プロセス全体でバイト配列を使用し、読み取られているバイト数を追跡していますが、それでも画像は破損してしまいます。ファイルを確認したところ、クライアントとサーバーでまったく同じバイト数が含まれているため、サーバーで何かが起こっていますが、正しくありません。コードに何か問題がありますか、それともサーバーの問題でしょうか?