说一下流程:
当一个数据报DatagramPacket做好了,就要用DatagramSocket.send()进行发送。
问题出现了:
这个时候需要启动一个定时器,当定时器到时间之后,还没有收到数据报的反馈,那么我们可以猜测:接受方没有收到我们发送的数据报。那么我们就要自动重新发送一个数据报。
问题是,这个定时器怎么实现。如果用Timer类来实现的话,那么在TimerTask重写的run()方法里面执行的必须是静态的代码(应该是这样吧),那么就没有办法重新发送这个DatagramPacket,因为它不是final的。请问各位大侠,怎么解决这个问题?

解决方案 »

  1.   

    没错.收到反馈,那么就停止计时器。比如使用Timer类的cancel方法。
    如果没有反馈,那么就应该重新发送数据报……可是TimerTask类中的run方法似乎不太适合用来重新发送数据报吧,因为这个DatagramSocket,DatagramPacket都不是final的
      

  2.   

    这和是否是final无关吧?不知道你的代码是怎么写的你的DatagramSocket,DatagramPacket对象是作为方法参数传入的并且这两个参数又被传入到方法里面定义的匿名类中?如果是这样,那么这样好了(在方法参数声明上加final):
    public void aMethod(final DatagramSocket ds, final DatagramPacket dp) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask(){
            public void run(){
                ds.send(dp);
            }
        }, 10 * 1000);
    }