这是server端的代码:
        private void shouwenjian_Load(object sender, EventArgs e)
        {
            //StartReceive();
            //开启接收线程   
            Thread TempThread = new Thread(new ThreadStart(this.StartReceive));
            TempThread.Start();         }
          #region 功能函数
          private void StartReceive()
        {
            //创建一个网络端点   
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse("3333"));            //MessageBox.Show(IPAddress.Any);               //创建一个套接字   
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            //绑定套接字到端口   
            server.Bind(ipep);            //开始侦听(并堵塞该线程)   
            server.Listen(10);            while (true)
            {                try
                {
                    Socket client =  server.Accept();
                    ClientSocket = client;
                    Thread TempThread = new Thread(new ThreadStart(this.Create));
                    TempThread.Start(); 
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "提示");
                }
            }        }
        #endregion          public void Create()
        {
            Socket client = ClientSocket;            //获得客户端节点对象   
            IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;
            //获得[文件名]   
            string SendFileName = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
            MessageBox.Show("文件名是:" + SendFileName);               //获得[包的大小]   
            string bagSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
            //MessageBox.Show("包大小" + bagSize);               //获得[包的总数量]   
            int bagCount = int.Parse(System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)));
            //MessageBox.Show("包的总数量" + bagCount);               //获得[最后一个包的大小]   
            string bagLast = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
            //MessageBox.Show("最后一个包的大小" + bagLast);               //创建一个新文件   
            FileStream MyFileStream = new FileStream(SendFileName, FileMode.Create, FileAccess.Write);            //已发送包的个数   
            int SendedCount = 0;
            while (true)
            {                byte[] data = TransferFiles.ReceiveVarData(client);
                if (data.Length == 0)
                {
                    break;
                }
                else
                {
                    SendedCount++;
                    //将接收到的数据包写入到文件流对象   
                    MyFileStream.Write(data, 0, data.Length);
                    //显示已发送包的个数     
                }
            }
            //关闭文件流   
            MyFileStream.Close();
            MessageBox.Show("接收完成");
            //关闭套接字   
            client.Close();
        }        private void button1_Click(object sender, EventArgs e)
        {
            if (ClientSocket != null)
            {
                ClientSocket.Close();
                ClientSocket = null;
            }
            Close();
        }       
    }
}
这是client端的代码:
namespace client
{
    public partial class fawenjian : Form
    {
        public fawenjian()
        {
            InitializeComponent();
        }        private void fawenjian_Load(object sender, EventArgs e)
        {
            this.textBox4.Text = Dns.GetHostByName(Dns.GetHostName()).AddressList[0].ToString();        }        private void StartSend()
        {
            //创建一个文件对象   
            FileInfo EzoneFile = new FileInfo(this.textBox1.Text);
            //打开文件流   
            FileStream EzoneStream = EzoneFile.OpenRead();
            //包的大小   
            int PacketSize = int.Parse(this.textBox6.Text);
            //包的数量   
            int PacketCount = (int)(EzoneStream.Length / ((long)PacketSize));
            //最后一个包的大小   
            int LastDataPacket = (int)(EzoneStream.Length - ((long)(PacketSize * PacketCount)));            //指向远程服务端节点   
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(txtIP.Text.Trim()), int.Parse(this.textBox5.Text));
            //创建套接字   
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //连接到发送端   
            client.Connect(ipep);            //获得客户端节点对象   
            IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;
            //发送[文件名]到客户端   
            TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));
            //发送[包的大小]到客户端   
            TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString()));
            //发送[包的总数量]到客户端   
            TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString()));
            //发送[最后一个包的大小]到客户端   
            TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString()));            //数据包   
            byte[] data = new byte[PacketSize];
            //开始循环发送数据包   
            for (int i = 0; i < PacketCount; i++)
            {
                //从文件流读取数据并填充数据包   
                EzoneStream.Read(data, 0, data.Length);
                //发送数据包   
                TransferFiles.SendVarData(client, data);
            }            //如果还有多余的数据包,则应该发送完毕!   
            if (LastDataPacket != 0)
            {
                data = new byte[LastDataPacket];
                EzoneStream.Read(data, 0, data.Length);
                TransferFiles.SendVarData(client, data);
            }            //关闭套接字   
            client.Close();  
            //关闭文件流   
            EzoneStream.Close();
            MessageBox.Show("文件传输完毕!");
        }        private void button1_Click(object sender, EventArgs e)
        {
            //选择要进行传输的文件   
            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                FileInfo EzoneFile = new FileInfo(this.openFileDialog1.FileName);
                this.textBox1.Text = EzoneFile.FullName;
                this.textBox2.Text = EzoneFile.Name;
                this.textBox3.Text = EzoneFile.Length.ToString();
            }        } 公共的类:
namespace server
{
    class TransferFiles
    {      
  
        public static int SendVarData(Socket s, byte[] data)   
        {   
            int total = 0;   
            int size = data.Length;   
            int dataleft = size;   
            int sent;   
            byte[] datasize = new byte[4];   
            datasize = BitConverter.GetBytes(size);   
            sent = s.Send(datasize);   
  
            while (total < size)   
            {   
                sent = s.Send(data, total, dataleft, SocketFlags.None);   
                total += sent;   
                dataleft -= sent;   
            }   
  
            return total;   
        }   
  
        public static byte[] ReceiveVarData(Socket s)   
        {   
            int total = 0;   
            int recv;   
            byte[] datasize = new byte[4];   
            recv = s.Receive(datasize, 0, 4, SocketFlags.None);   
            int size = BitConverter.ToInt32(datasize, 0);   
            int dataleft = size;   
            byte[] data = new byte[size];   
            while (total < size)   
            {   
                recv = s.Receive(data, total, dataleft, SocketFlags.None);   
                if (recv == 0)   
                {   
                    data = null;   
                    break;   
                }   
                total += recv;   
                dataleft -= recv;   
            }   
            return data;   
        }   
    }   
    }