2014-09-20 63 views
0

我寫過一部分代碼,服務器將從客戶端接收指令並將請求發送回客戶端。 但我想每5秒鐘從客戶端發送指令(Json消息)。我怎麼能這樣做?如何每五秒向服務器發送指令

public static void main(String[] args) throws IOException, InterruptedException, ParseException { 

    SynchronisedFile fromFile = null; 
    fromFile=new SynchronisedFile("file.txt"); 
    fromFile.CheckFileState(); 
    int counter = 1; 
    int receivedCounter = 1; 
    String receivedType=null; 

    DatagramSocket clientSocket = new DatagramSocket(); 

    InetAddress IPAddress = InetAddress.getByName("localhost"); 
    byte[] sendData = new byte[1024]; 
    byte[] receiveData = new byte[1024]; 

    while(true){ 

     Instruction inst = fromFile.NextInstruction(); 
     //System.out.println(inst.ToJSON()); 

     JSONObject jo = new JSONObject(); 
     jo.put("type", "inst"); 
     jo.put("inst", inst.ToJSON()); 
     jo.put("counter", counter); 
     //System.out.println(jo); 
     counter++; 

     sendData = jo.toString().getBytes(); 

     DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 4144); 
     clientSocket.send(sendPacket); 

     DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
     clientSocket.receive(receivePacket); 
     String receivedMessage = new String(receivePacket.getData()); 

     String subReceivedMessage = receivedMessage.trim(); 

     final JSONParser parser = new JSONParser(); 
     JSONObject obj; 
     obj = (JSONObject) parser.parse(subReceivedMessage); 

回答

0

你可以使用ScheduledExecutorService。以下是使用下面的(Callable)返回結果的基本示例。如果您不需要返回結果,則可以使用Runnable方法代替類似簽名:

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(10); 
ScheduledFuture<String> scheduledFuture = scheduledExecutorService.schedule(new Callable<String>() { 
    @Override 
    public String call() throws Exception { 
     return "Result"; 
    } 
}, 5, TimeUnit.SECONDS); 
+0

謝謝。非常有幫助 – 2014-09-21 04:09:37

+0

如果這是你正在尋找的東西,一定要把它標記爲答案。 – mkobit 2014-09-21 04:31:00

相關問題