崩溃
有时十多天没事,有时一天几次崩溃。自己查不出错,CATCH不到错。把代码发出来,请求帮助       private void button1_Click(object sender, EventArgs e)
        {
            StartListeningA();
        }
       //开始同步监听
        public void StartListeningA()
        {
            try
            {
                Thread thread = new Thread (new ThreadStart(accp));
                //thread.IsBackground = true; 
                thread.Start();
            }
            catch(Exception ee) {MessageBox.Show(ee.Message);}
        }
        //线程同步方法 accp的代码。
        private void accp()
        {
            MyServer = new IPEndPoint(myIP, 2003);
                sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sock.Bind(MyServer);
                sock.Listen(50);
                while (true)
                {
                    try
                    {
                        accSock = sock.Accept();
                        if (accSock.Connected)
                        {
                            Thread thread = new Thread(new ThreadStart(round));
                            thread.Start();
                            thread.IsBackground = true;
                        }
                    }
                    catch
                    {
                        return;
                    }
                }
        }        private void round()
        {
            while (true)
                {                    
                    NetworkStream netStream = new NetworkStream(accSock);
                    netStream.Read(RecByte, 0, RecByte.Length);                    
                    DO(netStream);
                }
        }        //关闭系统
        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

解决方案 »

  1.   

    www.codeproject.com   搜索socketsincs
      

  2.   

    线程里的方法一定要在外面包上try catch,否则它一旦报错,就会直接报到操作系统里,多的话就把程序搞崩溃了。
      

  3.   

    try catch是有的,只是粘出来太多,删掉了二楼说的能再清楚些吧,我没明白
      

  4.   

    看到楼主的代码。辛酸1 线程里的代码不做catch,一旦出现异常,程序无任何提示马上崩溃
    2 楼主这几个方法设计得不合理
    3 问题应该是没做同步改进:1 round方法重新定为:
    private void round(Socket socket) 

      while (true) 
      {                    
        NetworkStream netStream = new NetworkStream(socket); 
        netStream.Read(RecByte, 0, RecByte.Length);                    
        DO(netStream); 
      } 
    }2 把accSock声明为局部变量,避免同步问题,同时改变调用方式:
    Socket accSock = sock.Accept(); 
    if (accSock.Connected) 

      Thread thread = new Thread(new ParameterizedThreadStart(round));
      thread.IsBackground = true;
      thread.Start(accSock);

    这样一改,基本上应该可以解决程序崩溃的问题,不过,性能太差应该改用队列方式处理
      

  5.   

    错误 1 “round”的重载均与委托“System.Threading.ParameterizedThreadStart”不匹配 多线程刚刚学到,惭愧
      

  6.   

    呵呵,忘了,再改下
    private void round(Object obj) 

       Socket socket = (Socket)obj;
      while (true) 
      {                    
        NetworkStream netStream = new NetworkStream(socket); 
        netStream.Read(RecByte, 0, RecByte.Length);                    
        DO(netStream); 
      }