⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timeserver.java

📁 java nio 编程一个实例子.服务端程序
💻 JAVA
字号:
package com.ronsoft.books.nio.channels;import java.nio.ByteBuffer;import java.nio.ByteOrder;import java.nio.channels.DatagramChannel;import java.net.SocketAddress;import java.net.InetSocketAddress;import java.net.SocketException;/** * Provide RFC 868 time service (http://www.ietf.org/rfc/rfc0868.txt). * This code implements an RFC 868 listener to provide time * service.  The defined port for time service is 37.  On most * unix systems, root privilege is required to bind to ports * below 1024.  You can either run this code as root or * provide another port number on the command line.  Use * "-p port#" with TimeClient if you choose an alternate port. * * Note: The familiar rdate command on unix will probably not work * with this server.  Most versions of rdate use TCP rather than UDP * to request the time. * * Created: April 2002 * @author Ron Hitchens (ron@ronsoft.com) * @version $Id: TimeServer.java,v 1.1 2002/04/28 22:07:43 ron Exp $ */public class TimeServer{	private static final int DEFAULT_TIME_PORT = 37;	private static final long DIFF_1900 = 2208988800L;	// --------------------------------------------------------------	protected DatagramChannel channel;	public TimeServer (int port)		throws Exception	{		this.channel = DatagramChannel.open();		this.channel.socket().bind (new InetSocketAddress (port));		System.out.println ("Listening on port " + port			+ " for time requests");	}	public void listen() throws Exception	{		// allocate a buffer to hold a long value		ByteBuffer longBuffer = ByteBuffer.allocate (8);		// assure big-endian (network) byte order		longBuffer.order (ByteOrder.BIG_ENDIAN);		// zero the whole buffer to be sure		longBuffer.putLong (0, 0);		// position to first byte of the low-order 32 bits		longBuffer.position (4);		// slice the buffer, gives view of the low-order 32 bits		ByteBuffer buffer = longBuffer.slice();			while (true) {			buffer.clear();			SocketAddress sa = this.channel.receive (buffer);			if (sa == null) {				continue;	// defensive programming			}			// ignore content of recived datagram per rfc 868			System.out.println ("Time request from " + sa);			buffer.clear();		// sets pos/limit correctly			// set 64-bit value, slice buffer sees low 32 bits			longBuffer.putLong (0,				(System.currentTimeMillis() / 1000) + DIFF_1900);			this.channel.send (buffer, sa);		}	}	// --------------------------------------------------------------	public static void main (String [] argv)		throws Exception	{		int port = DEFAULT_TIME_PORT;		if (argv.length > 0) {			port = Integer.parseInt (argv [0]);		}		try {			TimeServer server = new TimeServer (port);			server.listen();		} catch (SocketException e) {			System.out.println ("Can't bind to port " + port				+ ", try a different one");					}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -