2015-05-24 44 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

那麼,當時間用完時,我必須捕捉到一個異常?對? –