我们最近项目上位机和下位机通信,上位机客户端是用C#写的 下位机是C语言linux操作系统,每当下位机发送数据过来到客户端会出现丢包现象,客户端是开启两个线程,一个发送线程,一个解析线程,采样的Socket异步通信模式,当接受到服务端信息时,将报文放入一个队列里面,解析线程会循环遍历处理这个队列!但是会出现丢包现象,跪求答案

解决方案 »

  1.   

    如果用的是tcp协议  请给予读取一定的休眠时间,因为网络延迟 或者计算机延迟,部分数据阻塞在 某个机器的 网卡中等待发送是常见的。 最好的方法 是使用wcf, 别自己从头写socket了
      

  2.   

    我一个线程在读取队列的时候 会给予10毫秒的休眠时间,还是出现这个现象
    代码如下
     /// <summary>
            /// 解释所有接收指令
            /// </summary>
            private void ProcessInBookCommand()
            {
                //ThreadPool.SetMaxThreads(10, 200);
                //ThreadPool.SetMinThreads(2, 40);
                while (true)
                {
                    if (TaskQueue.InBox.Count > 0)
                    {
                        InCommand inCommand = TaskQueue.InBox.Dequeue();
                        //加入线程池队列
                        ThreadPool.QueueUserWorkItem(new WaitCallback(Interpret), inCommand);
                    }                Thread.Sleep(10);
                }
            }