我用filestream读写文件,用networkstream发送接收文件,为何接收到的文件和原文件大小不一致呢?而且有时会显示接收到的文件已损坏,这会是什么原因造成的呢?

解决方案 »

  1.   

    //发送文件
            private void sendBinary(ref Socket socket, string filePath)
            {
                try
                {
                    long readcount = fi.Length / 10240;
                    long byteremain = fi.Length % 10240;
                    byte[] bb = new byte[10240];
                    int number;
                    stream = new NetworkStream(socket);
                    for (long count1 = 1; count1 <= readcount; count1++)
                    {
                        number = filestream.Read(bb, 0, bb.Length);
                        stream.Write(bb, 0, bb.Length);
                        stream.Flush();
                        bb = new byte[10240];
                    }
                    if (byteremain != 0)
                    {
                        bb = new byte[byteremain];
                        filestream.Read(bb, 0, bb.Length);
                        stream.Write(bb, 0, bb.Length);
                        stream.Flush();
                    }
                    filestream.Close();
                    stream.Close();
                    richTextBox1.AppendText("文件发送完毕" + "\r\n");
                    toolStripStatusLabel1.Text = "就绪";
                }
                catch (Exception f)
                {
                    MessageBox.Show(f.ToString(), "sendbinary errer");
                }
    //接收文件
            private void getBinary(ref Socket socket, string filePath)
            {
                try
                {
                    filestream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
                    byte[] bb = new byte[10240];
                    NetworkStream netStream = new NetworkStream(socket);
                    long readnumber;
                    long currentread = 0;
                    long readcount = Convert.ToInt64(str[1]) / 10240;
                    long byteremain = Convert.ToInt64(str[1]) % 10240;
                    while ((readnumber = netStream.Read(bb, 0, bb.Length)) > 0 && currentread != readcount)
                    {
                        currentread++;
                        filestream.Write(bb, 0, bb.Length);
                        filestream.Flush();
                        if (currentread == readcount)
                        {
                            if (byteremain != 0)
                            {
                                bb = new byte[byteremain];
                                netStream.Read(bb, 0, bb.Length);
                                filestream.Write(bb, 0, bb.Length);
                                filestream.Flush();
                            }
                            break;
                        }
                    }
                    filestream.Close();
                    netStream.Close();
                    richTextBox1.AppendText("接收文件成功\r\n");
                    filesend = false;            }
                catch (Exception f)
                {
                    richTextBox1.AppendText("接收文件时错误" + f.ToString() + "\r\n");
                }
            }