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

📄 timeserver.java

📁 jdk-6u10-docs java开发宝典
💻 JAVA
字号:
/* * @(#)TimeServer.java	1.3 01/12/13 * Listen for connections and tell callers what time it is.   * Demonstrates NIO socket channels (accepting and writing),  * buffer handling, charsets, and regular expressions. * * Copyright 2001-2002 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or  * without modification, are permitted provided that the following  * conditions are met: *  * -Redistributions of source code must retain the above copyright   * notice, this  list of conditions and the following disclaimer. *  * -Redistribution in binary form must reproduct the above copyright  * notice, this list of conditions and the following disclaimer in  * the documentation and/or other materials provided with the  * distribution. *  * Neither the name of Sun Microsystems, Inc. or the names of  * contributors may be used to endorse or promote products derived  * from this software without specific prior written permission. *  * This software is provided "AS IS," without a warranty of any  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY  * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY  * DAMAGES OR LIABILITIES  SUFFERED BY LICENSEE AS A RESULT OF  OR  * RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR  * ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE  * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,  * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF  * THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. *  * You acknowledge that Software is not designed, licensed or  * intended for use in the design, construction, operation or  * maintenance of any nuclear facility.  */import java.io.*;import java.net.*;import java.nio.*;import java.nio.channels.*;import java.nio.charset.*;import java.util.*;import java.util.regex.*;public class TimeServer {    // We can't use the normal daytime port (unless we're running as root,    // which is unlikely), so we use this one instead    private static int PORT = 8013;    // The port we'll actually use    private static int port = PORT;    // Charset and encoder for US-ASCII    private static Charset charset = Charset.forName("US-ASCII");    private static CharsetEncoder encoder = charset.newEncoder();    // Direct byte buffer for writing    private static ByteBuffer dbuf = ByteBuffer.allocateDirect(1024);    // Open and bind the server-socket channel    //    private static ServerSocketChannel setup() throws IOException {	ServerSocketChannel ssc = ServerSocketChannel.open();	InetSocketAddress isa	    = new InetSocketAddress(InetAddress.getLocalHost(), port);	ssc.socket().bind(isa);	return ssc;    }    // Service the next request to come in on the given channel    //    private static void serve(ServerSocketChannel ssc) throws IOException {	SocketChannel sc = ssc.accept();	try {	    String now = new Date().toString();	    sc.write(encoder.encode(CharBuffer.wrap(now + "\r\n")));	    System.out.println(sc.socket().getInetAddress() + " : " + now);	    sc.close();	} finally {	    // Make sure we close the channel (and hence the socket)	    sc.close();	}    }    public static void main(String[] args) throws IOException {	if (args.length > 1) {	    System.err.println("Usage: java TimeServer [port]");	    return;	}	// If the first argument is a string of digits then we take that	// to be the port number	if ((args.length == 1) && Pattern.matches("[0-9]+", args[0]))	    port = Integer.parseInt(args[0]);	ServerSocketChannel ssc = setup();	for (;;)	    serve(ssc);    }}

⌨️ 快捷键说明

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