import java.awt.Graphics; import java.util.*; import java.text.DateFormat; import java.applet.Applet;public class Clock extends Applet implements Runnable { private Thread clockThread = null; public void start() { if (clockThread == null) { clockThread = new Thread(this, "Clock"); clockThread.start(); } } public void run() { Thread myThread = Thread.currentThread(); while (clockThread == myThread) { repaint(); try { Thread.sleep(1000); } catch (InterruptedException e){ // the VM doesn't want us to sleep anymore, // so get back to work } } } public void paint(Graphics g) { // get the time and convert it to a date Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); // format it and display it DateFormat dateFormatter = DateFormat.getTimeInstance(); g.drawString(dateFormatter.format(date), 5, 10); } // overrides Applet's stop method, not Thread's public void stop() { clockThread = null; } } java tutorial上抄的
import java.util.*;
import java.text.DateFormat;
import java.applet.Applet;public class Clock extends Applet implements Runnable {
private Thread clockThread = null;
public void start() {
if (clockThread == null) {
clockThread = new Thread(this, "Clock");
clockThread.start();
}
}
public void run() {
Thread myThread = Thread.currentThread();
while (clockThread == myThread) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e){
// the VM doesn't want us to sleep anymore,
// so get back to work
}
}
}
public void paint(Graphics g) {
// get the time and convert it to a date
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
// format it and display it
DateFormat dateFormatter = DateFormat.getTimeInstance();
g.drawString(dateFormatter.format(date), 5, 10);
}
// overrides Applet's stop method, not Thread's
public void stop() {
clockThread = null;
}
}
java tutorial上抄的
jsyx() :你的作法好像只能显示客户端的时间
(13号端口是时间服务端口)
daytime 13 时钟服务,返回当前服务器时间的文本描述。 import java.io.*;
import java.net.*;public class DaytimeTCPClient
{ public static final String NETASCIIEOL = "\r\n";
private static final SocketFactory DEFAULTSOCKETFACTORY = new DefaultSocketFactory();
protected int timeout; //超时时间
protected Socket socket;
protected boolean isConnected; //连接标志
protected int defaultPort; //默认端口号
protected InputStream input; //Socket的输入流
protected OutputStream output; //Socket的输出流
protected SocketFactory socketFactory; //SocketFactory是Socket抽象类 public static final int DEFAULTPORT = 13;
private char buffer[]; public DaytimeTCPClient()
{
socket = null;
input = null;
output = null;
timeout = 0;
defaultPort = 0;
isConnected = false;
socketFactory = DEFAULTSOCKETFACTORY; buffer = new char[64];
setDefaultPort(13);
} public String getTime()
throws IOException
{
StringBuffer stringbuffer = new StringBuffer(buffer.length);
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(input));
do
{
int i = bufferedreader.read(buffer, 0, buffer.length);
if(i > 0)
stringbuffer.append(buffer, 0, i);
else
return stringbuffer.toString();
} while(true);
}
protected void connectAction()
throws IOException
{
socket.setSoTimeout(timeout);
input = socket.getInputStream();
output = socket.getOutputStream();
isConnected = true;
} public void connect(InetAddress inetaddress, int i)
throws SocketException, IOException
{
socket = socketFactory.createSocket(inetaddress, i);
connectAction();
} public void connect(String s, int i)
throws SocketException, IOException
{
socket = socketFactory.createSocket(s, i);
connectAction();
} public void connect(InetAddress inetaddress, int i, InetAddress inetaddress1, int j)
throws SocketException, IOException
{
socket = socketFactory.createSocket(inetaddress, i, inetaddress1, j);
connectAction();
} public void connect(String s, int i, InetAddress inetaddress, int j)
throws SocketException, IOException
{
socket = socketFactory.createSocket(s, i, inetaddress, j);
connectAction();
} public void connect(InetAddress inetaddress)
throws SocketException, IOException
{
connect(inetaddress, defaultPort);
} public void connect(String s)
throws SocketException, IOException
{
connect(s, defaultPort);
} public void disconnect()
throws IOException
{
socket.close();
input.close();
output.close();
socket = null;
input = null;
output = null;
isConnected = false;
} public boolean isConnected()
{
return isConnected;
} public void setDefaultPort(int i)
{
defaultPort = i;
} public int getDefaultPort()
{
return defaultPort;
} public void setDefaultTimeout(int i)
{
timeout = i;
} public int getDefaultTimeout()
{
return timeout;
} public void setSoTimeout(int i)
throws SocketException
{
socket.setSoTimeout(i);
} public int getSoTimeout()
throws SocketException
{
return socket.getSoTimeout();
} public void setTcpNoDelay(boolean flag)
throws SocketException
{
socket.setTcpNoDelay(flag);
} public boolean getTcpNoDelay()
throws SocketException
{
return socket.getTcpNoDelay();
} public void setSoLinger(boolean flag, int i)
throws SocketException
{
socket.setSoLinger(flag, i);
} public int getSoLinger()
throws SocketException
{
return socket.getSoLinger();
} public int getLocalPort()
{
return socket.getLocalPort();
} public InetAddress getLocalAddress()
{
return socket.getLocalAddress();
} public int getRemotePort()
{
return socket.getPort();
} public InetAddress getRemoteAddress()
{
return socket.getInetAddress();
} public boolean verifyRemote(Socket socket)
{
InetAddress inetaddress = socket.getInetAddress();
InetAddress inetaddress1 = getRemoteAddress();
return inetaddress.equals(inetaddress1);
} public void setSocketFactory(SocketFactory socketfactory)
{
if(socketfactory == null)
{
socketFactory = DEFAULTSOCKETFACTORY;
return;
} else
{
socketFactory = socketfactory;
return;
}
}
}
有一个有用的调试工具就是daytime服务。它的作用就是返回当前时间和日期,格式是字符串格式。基于TCP的daytime服务
daytime服务是基于TCP的应用,服务器在TCP端口13侦听,一旦有连接建立就返回ASCII形式的日期和时间,在传送完后关闭连接。接收到的数据被忽略。基于UDP的daytime服务
daytime服务也可以使用UDP协议,它的端口也是13,不过UDP是用数据报传送当前时间的。接收到的数据被忽略。Daytime格式
对于daytime没有特定的格式,建议使用ASCII可打印字符,空格和回车换行符。daytime应该在一行上。下面是两种流行的格式:Weekday, Month Day, Year Time-Zone
例子:Tuesday, February 22, 1982 17:37:43-PST和用于SMTP中的格式:dd mmm yy hh:mm:ss zzz
例子:02 FEB 82 07:59:01 PST
你可以用这个看看,但你还是要作修改,我要下班了。byebyepackage daytimeclient;import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
import java.net.*;/**
* Title: DaytimeClient
* Description:
* Copyright: Copyright (c) 2001
* Company: Huateng
* @author lu shengxiao
* @version 1.0
*/public class DayTimeClient extends Applet {
private static final int TIME_PORT=13;
private static final int TIMEOUT=10000;
private DatagramSocket timeSocket=null;
private static final int SMALL_ARRAY=1;
private static final int TIME_ARRAY=100;
InetAddress remoteMachine;
private String timeString;
private Label lblDayTime = new Label(); /**Start the applet*/
public void start() {
try{
timeSocket=new DatagramSocket();
}catch(SocketException e){
System.err.println("Unable to open socket:"+e);
}
try{
remoteMachine=InetAddress.getByName("HOSTNAME");
}catch(UnknownHostException uhe){
System.out.println("Unknown host"+remoteMachine+":"+uhe);
}
getDayTime();
} public String getDayTime(){
DatagramPacket timeQuery;
DatagramPacket response;
byte[] emptyBuffer;
try{
emptyBuffer=new byte[SMALL_ARRAY];
timeQuery=new DatagramPacket(emptyBuffer,emptyBuffer.length,remoteMachine,TIME_PORT);
timeSocket.send(timeQuery);
}catch(IOException e){
System.out.println("Unable to send to"+remoteMachine+":"+e);
} try {
timeSocket.setSoTimeout(TIMEOUT);
}catch (SocketException ex) {}
try{
emptyBuffer=new byte[TIME_ARRAY];
response=new DatagramPacket(emptyBuffer,emptyBuffer.length);
timeSocket.receive(response);
timeString=new String(response.getData());
lblDayTime.setText(timeString);
}catch(InterruptedIOException iie){
System.out.println("Timeout on receive:"+iie);
}catch(IOException ioe){
System.out.println("Failed I/O:"+ioe);
}
return timeString;
} /**Stop the applet*/
public void stop() {
if (timeSocket!=null) timeSocket.close();
} public DayTimeClient() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
lblDayTime.setText("label1");
this.add(lblDayTime, null);
}}
装好 simple tcp/ip service 后date time 服务自动就开启了
并且同时包括 tcp 和 udp 两种协议方式
参考楼上RedGuest(Haha)的解答
我上面的程序只能得到一次时间,你要把它改成每隔一秒循环一次的。