예제 #1
0
        private static RowClass GetRowClass(Model.Row row, int rowIndex, List <Model.Row> means)
        {
            RowClass rowClass = new RowClass();

            rowClass.RowIndex   = rowIndex;
            rowClass.ClassIndex = 0;

            double currentDistance = GetInfinityDistance(row, means[0]);

            for (int i = 1; i < means.Count; i++)
            {
                double distance = GetInfinityDistance(row, means[i]);
                if (distance < currentDistance)
                {
                    rowClass.ClassIndex = i;
                    currentDistance     = distance;
                }
            }


            return(rowClass);
        }
예제 #2
0
        private void Form1_Load(object sender, EventArgs e)
        {
            System.Timers.Timer timer1 = new System.Timers.Timer();
            timer1.Interval = 100;
            timer1.Elapsed += Timer1_Tick;
            timer1.Start();

            System.Timers.Timer timer2 = new System.Timers.Timer();
            timer2.Interval = 5000;
            timer2.Elapsed += Timer2_Tick;
            timer2.Start();

            IPEndPoint loaclEndPoint = new IPEndPoint(IPAddress.Any, 8001);

            server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            server.Bind(loaclEndPoint);

            Task.Run(() => {
                while (true)
                {
                    try
                    {
                        UdpSocket.Receive(server);

                        byte[] receiveData = new byte[1024];

                        EndPoint Remote = loaclEndPoint;
                        server.ReceiveFrom(receiveData, 0, 1024, SocketFlags.None, ref Remote);
                        string stringData     = Encoding.UTF8.GetString(receiveData);
                        ClientData clientData = JsonConvert.DeserializeObject <ClientData>(stringData);

                        string IpPort = Remote.ToString();//获取发送端的IP及端口转为String备用
                        string ip     = IpPort.Split(':')[0];
                        int port      = int.Parse(IpPort.Split(':')[1]);

                        if (clientData.Type == "Ping")
                        {
                            bool isHaveConnect = false;
                            for (int i = 0; i < TableData.Count; i++)
                            {
                                if (TableData[i].No == clientData.No)
                                {
                                    isHaveConnect = true;

                                    if (TableData[i].Ip == ip &&
                                        TableData[i].Port == port)
                                    {
                                        TableData[i].HeartNum++;
                                        TableData[i].HeartTime = DateTime.Now;
                                    }
                                    else
                                    {
                                        TableData[i].Ip        = ip;
                                        TableData[i].Port      = port;
                                        TableData[i].HeartNum  = 0;
                                        TableData[i].HeartTime = DateTime.Now;
                                    }
                                }
                            }
                            if (isHaveConnect == false)
                            {
                                RowClass udpData  = new RowClass();
                                udpData.No        = clientData.No;
                                udpData.Ip        = ip;
                                udpData.Port      = port;
                                udpData.HeartNum  = 0;
                                udpData.HeartTime = DateTime.Now;
                                udpData.Type      = clientData.Data;

                                TableData.Add(udpData);
                            }
                        }

                        else if (clientData.Type == "Get") // Get
                        {
                            List <RowClass> runData = new List <RowClass>();

                            if (clientData.Data.Contains("server"))
                            {
                                runData = TableData.Where(it => it.Type == clientData.Data).OrderByDescending(it => it.HeartTime).Take(1).ToList();
                            }
                            if (clientData.Data.Contains("client"))
                            {
                                runData = TableData.Where(it => it.Type == clientData.Data).OrderByDescending(it => it.HeartTime).ToList();
                            }
                            else if (clientData.Data == "All")
                            {
                                runData = TableData.ToList();
                            }

                            SocketUdpSend(ip, port, "GetData", JsonConvert.SerializeObject(runData));
                        }

                        else if (clientData.Type == "Send") // Get
                        {
                            RowClass SendClient = new RowClass();

                            SendClient = TableData.Where(it => it.No == clientData.No).FirstOrDefault();

                            if (SendClient != null)
                            {
                                SocketUdpSend(SendClient.Ip, SendClient.Port, "Send", IpPort);
                            }
                        }
                    }
                    catch
                    {
                    }
                }
            });
        }