案例是客户端发送请求到服务器端,然后服务器端收到请求传输文件到客户端
服务器端代码private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();            //服务端节点    
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 1234);            //创建套接字         
            Listensocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            //绑定IP地址和端口到套接字    
            Listensocket.Bind(ipep);            //启动监听          
            Listensocket.Listen(10);
            listBox2.Items.Add("开始监听客户端的连接请求");
        }private void timer1_Tick(object sender, EventArgs e)
        {
            //服务端传输文件到客户端
            //在一个单独的线程中监听客户连接
            listenThread = new Thread(listenClientConnnect);
            listenThread.Start();
            
        }        Socket Listensocket;
        Thread listenThread;
        //监听函数
        private void listenClientConnnect()
        {
            stopListen();//停用              while (true)
            {
                //建立一个与客户端通信的套接字 
                Socket CommunicationSocket = Listensocket.Accept();                //显示在listbox里面
                IPEndPoint clientIP = (IPEndPoint)CommunicationSocket.RemoteEndPoint;                AddMsg(string.Format("{0} 连接到本服务器 {1}", clientIP.Address, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));                //创建一个文件对象     
                FileInfo fileinfo = new FileInfo("aaa.txt");
                //打开文件流            
                FileStream filestream = fileinfo.OpenRead();
                //文件分块传输,分块的大小,单位为字节         
                int PacketSize = 5000;
                //分块的数量               
                int PacketCount = (int)(fileinfo.Length / ((long)PacketSize));
                //最后一个分块的大小           
                int LastPacketSize = (int)(fileinfo.Length - ((long)(PacketSize * PacketCount)));
                //发送文件名到接收端,文件名长度最多只允许100个字节       
                byte[] Fullfilename = new byte[100];
                if (System.Text.Encoding.UTF8.GetBytes(fileinfo.Name).Length > 100)
                {
                    MessageBox.Show("文件名太长");
                    return;
                }
                else
                {
                    byte[] filename = System.Text.Encoding.UTF8.GetBytes(fileinfo.Name);
                    for (int i = 0; i < filename.Length; i++)
                        Fullfilename[i] = filename[i];
                    CommunicationSocket.Send(Fullfilename);
                }                //文件按数据包的形式发送,定义数据包的大小      
                byte[] data = new byte[PacketSize];
                //开始循环发送数据包           
                for (int i = 0; i < PacketCount; i++)
                {
                    //从文件流读取数据并填充数据包  
                    filestream.Read(data, 0, data.Length);
                    //发送数据包                    
                    CommunicationSocket.Send(data, 0, data.Length, SocketFlags.None);
                }
                //发送最后一个数据包   
                if (LastPacketSize != 0)
                {
                    data = new byte[LastPacketSize];
                    filestream.Read(data, 0, data.Length);
                    //发送数据包             
                    CommunicationSocket.Send(data, 0, data.Length, SocketFlags.None);
                }
                filestream.Close();
                CommunicationSocket.Close();
                AddMsg(string.Format("向{0} 发送 文件 已完成 {1}", clientIP, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));                if (listenThread.IsAlive)
                {
                    listenThread.Abort();
                    if (Listensocket != null)
                    {
                        Listensocket.Close();
                    }
                    listBox2.Items.Add("服务器监听已经停止...");
                }
                //listenThread.Abort();      终止线程
                //Listensocket.Close();      释放Socket
                //CommunicationSocket.Close();
                //listenThread.DisableComObjectEagerCleanup();
            }
        }        //停止监听
        private void stopListen()
        {
            Action stopAction = () => { stopListen(); };
        }//建立一个与客户端通信的套接字 
Socket CommunicationSocket = Listensocket.Accept();
如果释放了Socket,上面那段代码就会报错: 无法访问已释放对象对象名:System.Net.Sockets.Socket
如果没释放Socket,上面那段代码就会报错: 一个封锁操作被对WSACancelBlockingCall的调用中断.在线求,急..