0

テキストファイルは問題ないようです。ファイルを送信するために使用されるコードは次のとおりです。

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

画像アーティファクトに関する多くの投稿を見てきましたが、すべての問題はバイトがテキストにエンコードされることに対処していました。私はその問題を回避したと信じています。プロセス全体でバイト配列を使用し、読み取られているバイト数を追跡​​していますが、それでも画像は破損してしまいます。ファイルを確認したところ、クライアントとサーバーでまったく同じバイト数が含まれているため、サーバーで何かが起こっていますが、正しくありません。コードに何か問題がありますか、それともサーバーの問題でしょうか?

4

1 に答える 1

2

実際に送受信されたバイト数をほとんど無視しているようです。特に、以前writer.Write(buffer);に完全に満たされたかどうかに関係なく、バッファー全体を書き込みますsock.Receive(buffer);

于 2012-05-28T20:14:05.350 に答える