我用winfrom做了一个与硬件通信的服务器,但发现会丢失硬件发过来的数据包,请教如何解决数据包丢失的问题。??分不多,请大家帮忙看看,谢谢!
        /// <summary>
        /// 取心跳包
        /// </summary>
        /// <param name="time"></param>
        /// <param name="index"></param>
        /// <param name="buf"></param>
        /// <param name="length"></param>
        /// <returns>return the length of buf 0 no packet, -1 not start, -2 packet length > length;</returns>
        [DllImport("Iocp_dll.dll", EntryPoint = "_GetHeartBeatPacket@16", CharSet = CharSet.Auto)]
        public static extern int GetHeartBeatPacket(ref uint time, ref int index, byte[] buf, int length);        public void GetHeartPacket()
        {
            uint heartTime = 0;
            int heartIndex = -1;
            byte[] heartbuffer = new byte[10];//接收包缓冲区
            int heart = -1;//心跳包的返回值            while (true)
            {
                heart = Iocp_Dll.GetHeartBeatPacket(ref heartTime, ref heartIndex,heartbuffer,heartbuffer.Length);
                if ((heart != 0) && (heart != -1) && (heart != -2))
                {
                    ushort cmd = 0x00A0;
                    SendCmdPacket.SendPacket(heartTime, heartIndex, cmd);//表示控制器当前的与上位机通信正常
                    DcuCacheInfo cache = DcuCacheManager.GetDucCacheMessageByTime(heartTime, heartIndex);
                    if (cache != null)//保存数据
                    {
                        cache.OnlineTime = DateTime.Now;
                        DcuCacheManager.ModifDcuCacheMessageByTime(cache);
                    }
                }                ExitCmd();
                GC.Collect();
                Thread.Sleep(360);
            }
        }