大家好这里有一个发送端和接收端的程序,可以运行时有错误,提示无法访问已释放的对象什么意思?
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace 发送端
{
    class Program
    {
        static void Main(string[] args)
        {
            IPAddress severip = IPAddress.Parse("127.0.0.1");
            IPEndPoint ep = new IPEndPoint(severip, 5353);
            Socket QuerySocket=new Socket (AddressFamily .InterNetwork ,SocketType .Stream ,ProtocolType .Tcp );
            QuerySocket .Connect (ep);
            byte[] senMsg = Encoding.ASCII.GetBytes("message send");
          
            if(QuerySocket .Connected )
            {
                QuerySocket .Send (senMsg );
            }
            QuerySocket.Shutdown(SocketShutdown.Send);
          
            QuerySocket.Close(); 
            Console.ReadKey();
           
        }
    }
}
namespace 接受端
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            IPAddress hostIP = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0];
            IPEndPoint ep = new IPEndPoint(hostIP, 5353);
            Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            listenSocket.Blocking = true;
            listenSocket.Bind(ep);
            listenSocket.Listen(2);
            Socket querySocket = listenSocket.Accept();
            string sb="";
         
                while (true)
                {
                    byte[] bufferRe = new byte[1024];
                    int n;
                    n = querySocket.Receive(bufferRe);//提示这儿有错为什么
                    sb = sb + Encoding.ASCII.GetString(bufferRe, 0, n);
                    if (sb.IndexOf("<EOF>") > -1)
                    {
                        Console.WriteLine("receive complish");
                        break;
                    }
                    Console.WriteLine("the message is" + sb);
                    querySocket.Shutdown(SocketShutdown.Both);
                    querySocket.Close();
                             }
          
                 }
    }
}

解决方案 »

  1.   

    querySocket.Close();
    都Close掉了当然就释放掉了……
    把这句话放到while外面
     while (true)
      {
      byte[] bufferRe = new byte[1024];
      int n;
      n = querySocket.Receive(bufferRe);//提示这儿有错为什么
      sb = sb + Encoding.ASCII.GetString(bufferRe, 0, n);
      if (sb.IndexOf("<EOF>") > -1)
      {
      Console.WriteLine("receive complish");
      break;
      }
      Console.WriteLine("the message is" + sb);
      querySocket.Shutdown(SocketShutdown.Both);
      
          }
    querySocket.Close();
      

  2.   

    n = querySocket.Receive(bufferRe);//提示这儿有错为什么
    你还没收完呢 发送端就关闭了
    发送端:发完了不要马上关
    Console.ReadKey();QuerySocket.Shutdown(SocketShutdown.Send);
        
      QuerySocket.Close();  
      Console.ReadKey();
      

  3.   

    上面提示没有处理SocketException什么意思
      

  4.   

    呃……把那个ShutDown也放到外面……
      

  5.   

    把 Console.WriteLine("the message is" + sb);放在while里面就是不停地接受信息,但是把这句话放在while外面则不接收信息了,为什么
      

  6.   

    Console.WriteLine就是输出啊……你把它放到while外面它就不执行啦……怎么可能输出呢?
      

  7.   


    可以设置变量string strRecieve =string.Empty; 
    while()
    {   ……
    strRecieve = strReceive + sb ;
    }
    Console.WriteLine("the message is" + strRecieve );