using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;namespace client
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }        Thread myThread;
        Socket cli;
        IPAddress serIP;
        string fileName;
        int fileLength;
        int t=0;
        private void btnCon_Click(object sender, EventArgs e)
        {
            cli = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            serIP = IPAddress.Parse("172.16.145.36");
            IPEndPoint ipPoint = new IPEndPoint(serIP, 8008);
            cli.Connect(ipPoint);
            MessageBox.Show("连接成功!");
        }        private void btnSend_Click(object sender, EventArgs e)
        {
            myThread = new Thread(new ThreadStart(sendFile));
            myThread.SetApartmentState(ApartmentState.STA);
            myThread.Start();
        }
        FileStream readFile;
        void sendFile()
        {
            byte[] b = new byte[1024 * 1024];
            // openFileDialog1.ShowDialog();
            openFileDialog1.FileName = "";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                readFile = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
                fileLength = Convert.ToInt32(readFile.Length);
                fileName = openFileDialog1.FileName;
            }            b = System.Text.Encoding.BigEndianUnicode.GetBytes(("name|" + fileName + "|" + fileLength.ToString()).ToCharArray());
            cli.Send(b);
            int num = 0;
            CheckForIllegalCrossThreadCalls = false;
            progressBar1.Maximum = fileLength;
            bool done = false;
            timer1.Start();
            while (!done)
            {
                if (num < fileLength)
                {
                    progressBar1.Value = num;
                    b = new byte[5*1024*1024];
                    readFile.Read(b, 0, 5 * 1024 * 1024);
                    cli.Send(b);
                    lblShowSpeed.Text = "已经发送了:" + (num / 1024 / 1024).ToString() + "M";
                    num += b.Length;
                    this.Refresh();                }
                else
                {
                    timer1.Stop();
                    MessageBox.Show("发送完毕" + t.ToString());
                    done = true;
                    cli.Close();                }            }
            //没有执行下面代码????
            lblShowSpeed.Text = "平均传输速度:" + (fileLength / 1024 / 1024 / t).ToString() + "M/s";
            MessageBox.Show("1");        }        private void timer1_Tick(object sender, EventArgs e)
        {
            t += 1;
         
        }
    }
}我这里的发送是一边读取文件一边发送的(while循环里面读多少发多少),然后此处我判断文件是否发送完毕时用一个int变量num来记录之前发送的文件长度,然后跟文件的总长度比较: if (num < fileLength)  问题:怎么当发送完毕后
else
                {
                    timer1.Stop();
                    MessageBox.Show("发送完毕" + t.ToString());
                    done = true;
                    cli.Close();                }
没有执行这下面的内容,服务器那边有提示接受完成,而且文件时完整发送的。就是客户端这里有问题。
MessageBox.Show("发送完毕" + t.ToString());---这句没有显示出来.

解决方案 »

  1.   

     else
                    {
                        timer1.Stop();
                        MessageBox.Show("发送完毕" + t.ToString());
                        done = true;
                        cli.Close();                }            }
                //没有执行下面代码????
                lblShowSpeed.Text = "平均传输速度:" + (fileLength / 1024 / 1024 / t).ToString() + "M/s";
                MessageBox.Show("1");
    有无人能告诉我为什么下面这些没有执行,服务器那边都完整接受好了。
      

  2.   

    lblShowSpeed.Text = "平均传输速度:" + (fileLength / 1024 / 1024 / t).ToString() + "M/s";
    放到while 里面 应该可以
    感觉你这个程序有点问题  怎么是死循环