客户端想要连续从固定路径读取图片,然后将图片发送给服务器端,但是我却经常出现发送一张图片之后报
:无法访问已释放的对象 对象名“System.Net.Socket.TcpClient” 
 客户端简单起见就写循环体里面东西了

 try
         {
                TcpClient client = new TcpClient();
                client.Connect(System.Net.IPAddress.Parse("166.111.66.37"), 8880);
                string[] files = Directory.GetFiles(@"C:\Documents and Settings\Administrator.B3B7434061FE4C4\My Documents\Visual Studio 2005\Projects\MyProject\通信Client端\通信Client端\bin\Debug\");
                foreach (string file in files)
                {                    string filefullname = Path.GetFileName(file);
                    string suffix = Path.GetExtension(file);
                    if (suffix == ".jpg")
                    {
                          
                          
                         
                            myMedia.FileName = System.IO.Path.GetExtension(filefullname);
                            Console.WriteLine(filefullname);
                            FileStream fs = new FileStream(filefullname, FileMode.Open);
                            myMedia.LoadFileData(fs);
                            NetworkStream clientStream = client.GetStream();//创建接收用的Stream                            MemoryStream myFile = new MemoryStream();
                            BinaryFormatter formatter = new BinaryFormatter();
                            formatter.Serialize(myFile, myMedia);                            arrbyte = myFile.ToArray();                            myFile.Close();
                            clientStream.Write(arrbyte, 0, arrbyte.Length);
                            clientStream.Close();
                            client.Close();
                         
                    }
       
服务器端namespace ldyServer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private SerializeFile myMedia = new SerializeFile();
        private SerializeFile newFile = null;
        private void Form1_Load(object sender, EventArgs e)
        {
            
        }        private void button1_Click(object sender, EventArgs e)
        {
            this.button1.Enabled = false;
            //新建监听 
            TcpListener listener = new TcpListener(IPAddress.Parse("166.111.66.37"), 8880);
            listener.Stop();
            //开始监听 
            listener.Start();
            while (true)
            {
                const int bufferSize = 40960000;
                TcpClient client = listener.AcceptTcpClient();               
                //接收客户端传过来的数据 
                NetworkStream clientStream = client.GetStream();//提供网络访问的数据流
                byte[] responseBuffer = new byte[bufferSize];//提供一个缓冲区
                MemoryStream memStream = new MemoryStream();//将网络接收的数据流储存起来
                int bytesRead = 0;
                do
                {
                    bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
                    memStream.Write(responseBuffer, 0, bytesRead);
                   
                                   } while (bytesRead > 0);                          
                 BinaryFormatter formatter = new BinaryFormatter();               
                 memStream.Seek(0, SeekOrigin.Begin);
                 newFile = (SerializeFile)formatter.Deserialize(memStream);//反序列化以创建与原图形相同的对象图形;
                 //自定义存放目录 newFile.FileName 存放在debug下面
                 FileStream fs = new FileStream(newFile.FileName, FileMode.OpenOrCreate);
                 BinaryWriter w = new BinaryWriter(fs);
                 w.Write(newFile.FileData);
                 fs.Close();
                 memStream.Close();
                MessageBox.Show("成功");
                
            }         } 
      

解决方案 »

  1.   

    4L和LZ是什么关系?
    http://topic.csdn.net/u/20100726/20/2326aed8-512f-43f5-95e9-abf1fa42244c.html
      

  2.   

    因为服务器对你的链接的处理规则是 短连接. 所以你一次连接只能发送一次数据.你自己都写得很清楚了:client.Close();client的Close的意思是让server在接收足够的字节之后退出read阻塞.
    你这个模式只能发一次连一次. 如3楼所说的即可.
    如果想使用长连接,那么就需要定义一个规则,让server知道一个包什么地方是结尾 通过定协议来传递数据规则.这样server端可以和你保持一个不断开的 socket通道,相互传递数据.