2009-08-04 195 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实现了很多网络协议。

相关问题