2015-05-24 45 views
0

我试图做的工作就是模拟停止和等待ARQ在java.The初始设置如何在java中实现多线程计时器任务?

  1. 创建ServerSocket
  2. 对于每个接受的客户端,使用ServerSocket.accept为该客户端创建一个新线程。

现在,主要部分是我基本上试图做的。

  1. 发送数据包给客户端。 (或者一些数据到客户端)
  2. 等待1秒但如果ACKKNOWLEDGEMENT ARRIVES内的休息时间等候时间,并何去何从下一个循环

    List<String> frames = frame.getFrames(Server.getData()); 
    for(int i=0;i<frames.size();++i) 
    { 
        String currFrame = frames.get(i); 
        writer.println(currFrame); // A printwriter for socket 
        writer.flush(); 
        if(reader.readline()) // for 1 sec 
        /** 
         Here is what I want to do. I want to keep reading for input upto 1 sec. 
         if No input is found after even after 1 sec. Decrement i and go to the 
         start of the loop 
        **/ 
    
    } 
    

    的问题是,这个阅读器是一个阻塞代码将保持到输入可用。但是我想要的是,如果1秒后读卡器没有找到输入,它就会跳出循环。我们必须注意到这个代码是在一个单独的线程中。

那么,这个问题有没有简洁的解决方案? 和here是完整的代码。

+0

阅读['Socket的()']的文件(http://docs.oracle.com/javase/7/docs/api/java/net /Socket.html#setSoTimeout(int))。 – RealSkeptic

+0

你也可以通过NIO尝试非阻塞的,基于事件的IO。这样一个计时器和一个阅读只会是两种不同的事件。 – the8472

回答

1

需要setSoTimeut:

ServerSocket socket = new ServerSocket(somePort); 

    Socket incoming = socket.accept(); 
    incoming.setSoTimeout(1000); 
+0

那么,当时间用完时,我必须捕捉到一个异常?对? –