2009-08-04 62 views
2

我剛剛學習如何在Java中進行網絡連接,從NTP服務器獲取時間的第一個簡單示例一直拋出ConnectException異常。我將複製並粘貼代碼,但是我感覺它必須是與代碼無關的東西,因爲這些代碼是從一本書出來的。連接到NTP服務器始終失敗(Java)

import java.io.*; 
import java.net.*; 

public class AskTime { 

    public static void main(String a[]) throws Exception { 
     if(a.length != 1) { 
      System.out.println("your lame"); 
      System.exit(0); 
     } 

     String machine = a[0]; 
     final int daytimeport = 13; 
     Socket so = new Socket(machine,daytimeport); 
     BufferedReader br = new BufferedReader(new InputStreamReader(so.getInputStream())); 
     String time = br.readLine(); 
     System.out.printf("%s says it is %s %n", machine, time); 
    } 
} 

我用來執行此命令是:

java AskTime us.pool.ntp.org

更新:閱讀msaeed的意見後,我改變了端口123,我現在被告知拒絕連接,而不是連接超時。所以我認爲msaeed是對的,有沒有人有任何想法我需要溝通來獲得一個時間?

+0

哦,是的,「你的跛腳」部分不是來自書中的代碼,我相當確定的其他一切都是相同的。 – Anton 2009-08-04 01:42:01

回答

4

顯然,這段代碼使用了使用端口13的舊DAYTIME protocolNTP protocol使用了端口123,並且需要更多的通信。許多NTP服務器停止支持DAYTIME查詢。

NTP項目爲Java here中的NTP客戶端提供示例代碼。

+0

任何想法還需要什麼來請求一段時間? – Anton 2009-08-04 02:09:27

+0

已更新答案,以包含示例代碼的鏈接! – notnoop 2009-08-04 02:14:18

1

msaeed是對的。你可以使用你的代碼,如「time.nist.gov」 daytime服務器 - 或者選擇任何其他從this list

更新如果你的最終目標是與NTP服務器(通信,而不是與插座爲你」玩最初說過)你應該看看Commons Net。事實上,你應該看看它的源頭 - Commons Net實現了很多網絡協議。