请教个问题 我编写一个程序 不断的接受 用户发送的UDP报文 但每次用户为防止丢包,
会连续发送3个完全相同的报文给我 我在接到第一个报文后如何将 后面两个重复的报文丢弃。 
请教个思路非常感谢。另外我使用的是多线程的方式,每个请求会有相应的线程处理(使用的线程池和工作队列)所以也要考虑并发问题
请教各位高手

解决方案 »

  1.   

    应该在你的UDP包数据中包含序号,如果发现序号已经收到则丢弃。
      

  2.   

    设置一个变量 存放上次发送的报文 变量是volatile的,如果正在处理的报文和变量的内容一样就丢弃
      

  3.   

    d是啊 可是首先如果使用MAP的话 那么可以做到这点,当以个报文进来后 把他的ID记录在MAP 或者其他集合里,然后再用后进来的报文取集合里查找如果有则丢弃,但问题是,这样会导致这个集合无限膨胀,所以必定要在一个时刻将这个集合清空假设为装100个报文以后,但是这样就会产生问题,比如一组报文的第一个包刚写
    进集合,这是正好是100个则清空集合那么这组报文的第二个包就照样可以写进来,而不会被丢弃了。问题就在于最理想的清空集合的时候是在没有UDP访问的时候,但是根本不可能知道用户什么时候会来访问
      

  4.   

    如果你用UDP并且要求可靠的。你可以去参考http://sourceforge.net/projects/rudp/这个RUDP保证传输是可靠的
      

  5.   

    ...这个貌似也不可以,客户端传递的报文走的是国际标准 是UDP的 不是我可以控制的所以我只能使用UDP来接收
      

  6.   

    你可以使用 LinkedHashMap, 没当你想插入一条数据时,检查一下是否map的数量过大,超过阙值的话就先删除第一个。LinkedHashMap<String, String> a = new LinkedHashMap<String, String>();
    a.put("a", "");
    a.put("b", "");
    a.put("c", "");
    a.put("d", "");
    a.remove(a.entrySet().iterator().next().getKey());
    a.remove(a.entrySet().iterator().next().getKey());
    System.out.println(a);
      

  7.   

    RUDP就是基于UDP实现的可靠传输协议啊