开启Socket的方法为
 
//CS为    CreatSocket()函数所在的类的对象   
private void btn_Creat_Click(object sender, EventArgs e)
        {
            try
            {
                Thread t = new Thread(cs.CreatSocket);
                t.Start();
                tb_ChatNote.Text += "游戏已建立,等待连接……\r\n";
                myColor = 1;
            }
            catch
            {
            }
        }
 //创建端口
        public void CreatSocket()
        {
            creatNew = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            acceptSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            creatNew.Bind(source);
            creatNew.Listen(5);
            acceptSocket = creatNew.Accept();
            t = new Thread(Process);
            t.Start();
        }
 private void Process()
        {
            try
            {
                while (acceptSocket != null && acceptSocket.Connected)
                {
                    byte[] buffer = new byte[1024];
                    acceptSocket.Receive(buffer);
                    if (received != null)
                    {
                        received(Encoding.Default.GetString(buffer));
                    }
                }
            }
            catch
            {
            }
        }关闭函数如下,但是不能成功        private void btn_Close_Click(object sender, EventArgs e)
        {
            try
            {
                cs.CloseConnect();
            }
            catch
            {
            }
        }
        //断开连接
        public void CloseConnect()
        {            try
            {
                creatNew.Close();
                acceptSocket.Close();
                
                
            }
            catch
            {
            }
        }        
请问应如何关闭.

解决方案 »

  1.   

    代码这个乱呀。多线程尤其要把结构做好,不然调试时候就要发疯了。先把同步的Socket弄清楚,不要多线程,然后再来转成多线程吧。
      

  2.   

    public void CloseConnect()
            {            try
                {
                    if(creatNew!=null)
                      creatNew.Close();
                    if(acceptSocket!=null)
                      acceptSocket.Close();
                    
                    
                }
                catch
                {
                }
            }
      

  3.   

    这样经典的try catch许久没有看到了。是不是在Main里面写一个更好,任何编程错误也一并屏蔽了?