/*
          TimeoutObject.Reset();
                Socket socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ipendpount = new IPEndPoint(IPAddress.Parse(info.Ip),int.Parse(info.Port));
                socketClient.BeginConnect(ipendpount, CallBackMethod,socketClient);
                //socketClient.Connect(IPAddress.Parse(IpAndport[i].Ip), int.Parse(IpAndport[i].Port));
                if (TimeoutObject.WaitOne(timeoutMSec, false)&&socketClient!=null)
                {
                    //MessageBox.Show("网络正常");
                    dict.Add(info.Ip, socketClient);
                    //------UI显示在线

                    // MessageBox.Show(IpAndport[i].Ip + "服务器" + "在线");
                    //开通讯线程
                    ApplyThread(OnLine, socketClient);
                    ShowIpStauts(info.Ip, OnLine);
                }
                else
                {
                    //MessageBox.Show("连接超时");
                    throw new SocketException();
                }

         */
        /// <summary>
        /// 连接一个服务器的方法
        /// </summary>
        /// <param name="objinfo">服务器信息对象</param>
        private void AloneConnect(object objinfo)
        {
            ClientInfo info = (ClientInfo)objinfo;
            try
            {
                Socket socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                socketClient.Connect(IPAddress.Parse(info.Ip), int.Parse(info.Port));

                dict.Add(info.Ip, socketClient);

                ShowIpStauts(socketClient.RemoteEndPoint.ToString().Substring(0, socketClient.RemoteEndPoint.ToString().IndexOf(":")), OnLine);
                //开通讯线程
                ApplyThread(OnLine, socketClient);

            }
            catch (SocketException)
            {

                ShowIpStauts(info.Ip, DisConnection);
                //开重连
                ClientInfo Info = new ClientInfo(info.Ip, info.Port);
                ApplyThread(DisConnection, Info);

            }
        }
        /// <summary>
        /// 开始向所有服务发送连接请求,即判断是否在线
        /// </summary>
        private void startconnect()
        {
            DataTable dt = helper.getDs("select * from MedicineInfo", "MedicineInfo").Tables[0];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                ClientInfo info = new ClientInfo(dt.Rows[i][2].ToString(), dt.Rows[i][3].ToString());
                List.Add(info);
            }

            pts = new ParameterizedThreadStart(client.connect);
            thradRecMsg = new Thread(pts);
            thradRecMsg.IsBackground = true;
            thradRecMsg.Start(List);
        }
        //------------------------------------------------------  
        /// <summary>
        /// 接受来自服务器的信息
        /// </summary>
        /// <param name="Socketclient">服务器的socket对象</param>
        private void RecMsg(object Socketclient)
        {
            SocketInfo s = (SocketInfo)Socketclient;
            try
            {
               
                DateTime dt = DateTime.Now;
               
                while (s.Socket.Receive(s.Bufffer, 0, s.Bufffer.Length, SocketFlags.None) > 0)
                {
                    string command = Encoding.GetEncoding("GBK").GetString(s.Bufffer);
                    s.Command = command;
                    s.Bufffer = new byte[1024];
                    Qmessage.Enqueue(s);
                   
                  
                   
                   
                    
                }
            }
            catch (Exception ex)
            {
                if (FindIsExist(s.Ip) && !IsApplyRetry[s.Ip])
                {
                  
                    IsApplyRetry[s.Ip] = true;
                    ThreadPool[s.Ip].Abort();
                    ThreadPool.Remove(s.Ip);
                    dict[s.Ip].Socket.Close();
                    dict[s.Ip].Socket.Dispose();
                    dict.Remove(s.Ip);
                    ShowIpStauts(s.Ip, DisConnection);
                    MessageBox.Show(ex.ToString());
                    ParameterizedThreadStart pts = new ParameterizedThreadStart(Retry);
                    Thread thradRecMsg = new Thread(pts);
                    thradRecMsg.IsBackground = true;
                    ClientInfo info = new ClientInfo(s.Ip,s.Port);
                    thradRecMsg.Start(info);
                }
            }
           
           
            

        }