socket编程 动态Thread怎么关闭

socket编程 动态Thread如何关闭
目前的代码逻辑:动态创建带socket参数的Thread,开启线程连接socket并接受数据,
                             接受完数据立刻socket.Disconnet()并且Thread.Abord()
现在的问题是,动态创建的Thread无法关闭

        /// 添加带socket参数的线程

        private void AddCCDThread(ccd c)
        {
            Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(Receive)) { IsBackground = true };
            thread.Start(c);
        }

        Process current = Process.GetCurrentProcess();
        void Receive(object p)
        {
            ccd client = (ccd)p;
            
            IPAddress ipAdress = IPAddress.Parse(client.ip);
            IPEndPoint endPoint = new IPEndPoint(ipAdress, Convert.ToInt32(client.port));//终结点
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                socket.Connect(endPoint);  
            }
            catch
            {
            }
            while(socket.Connected)
            {
                try
                {
                    byte[] byteMsg = new byte[1024 * 1024 * 4];
                    int length = socket.Receive(byteMsg);
                    string strMsg = Encoding.Default.GetString(byteMsg, 0, length);

                }
                catch
                {
                }

                socket.Disconnect(true);
                
            }
            //问题:断点根本不到if这里 
            if (System.Threading.Thread.CurrentThread.IsAlive)
            {
               
                System.Threading.Thread.CurrentThread.Abort();

            }
------解决思路----------------------
走不到if是没跳出while循环,还是走到if条件判断为false?

目测你表达是if条件判断时结果为false
if的条件System.Threading.Thread.CurrentThread,CurrentThread虽然是新线程启动执行,这个线程未必就是新启的thread

如果是第一种,你确定下socket.Disconnect是否关闭了连接?不行就进行close
------解决思路----------------------
这是因为这行int length = socket.Receive(byteMsg);阻塞住线程,因此执行到不了后面的断点。

一种解决方法就是外部诱发socket.Receive中断。这里可以用socket.ShutDown来导致socket.Receive抛出异常,从而跳出阻塞:
1、把socket声明为成员变量(而不是定义在Receive函数内)。
2、想退出接收线程的时候,调用成员变量socket的socket.ShutDown和socket.Dispose。

------解决思路----------------------
执行socket.Receive之前,设置一下readtimeout,让它没有收到数据的时候不要永远阻塞
------解决思路----------------------
在while逻辑中应该有数据接受完成的判定逻辑
即在接收完数据后进行逻辑判定,决定是否要继续接受。
如果不需要,break出while循环。
否则会阻塞在receive