亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? quickserver.java

?? 一個用java編寫的服務(wù)器,對于學(xué)習(xí)網(wǎng)絡(luò)編程的人來說是個很好的例子
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
/*
 * This file is part of the QuickServer library 
 * Copyright (C) QuickServer.org
 *
 * Use, modification, copying and distribution of this software is subject to
 * the terms and conditions of the GNU Lesser General Public License. 
 * You should have received a copy of the GNU LGP License along with this 
 * library; if not, you can download a copy from <http://www.quickserver.org/>.
 *
 * For questions, suggestions, bug-reports, enhancement-requests etc.
 * visit http://www.quickserver.org
 *
 */

package org.quickserver.net.server;

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

import org.quickserver.net.*;
//v1.1
import org.quickserver.net.qsadmin.*;
//v1.2
import java.util.logging.*;
//v1.3
import org.quickserver.util.pool.*;
import org.quickserver.util.pool.thread.*;
import org.apache.commons.pool.*;
import org.quickserver.util.xmlreader.*;
import org.quickserver.sql.*;
//v1.3.1
import java.util.*;
//v1.3.2
import org.quickserver.util.*;
import java.util.regex.*;
//v1.3.3
import org.quickserver.security.*;
//v1.4.0
import javax.net.ssl.*;
import javax.net.*;
import java.security.*;
import java.security.cert.*;
import org.quickserver.util.io.*;
//v1.4.5
import java.nio.*;
import java.nio.channels.*;
import org.quickserver.net.server.impl.*;

/**
 * Main class of QuickServer library. This class is used to create 
 * multi client servers quickly.
 * <p>
 * Ones a client is connected, it creates {@link ClientHandler} object, 
 * which is run using any thread available from the pool of threads 
 * maintained by {@link org.quickserver.util.pool.thread.ClientPool}, which 
 * handles the client. <br/>
 * QuickServer divides the application logic of its developer over eight 
 * class, <br>
 * 	<ul>
 *		<li>ClientEventHandler<br>
 * 		   &nbsp;Handles client events [Optional Class].
 * 		<li>ClientCommandHandler [#]<br>
 * 		   &nbsp;Handles client character/string commands.
 * 		<li>ClientObjectHandler [#]<br>
 * 		   &nbsp;Handles client interaction - Object commands.
 *		<li>ClientBinaryHandler [#]<br>
 * 		   &nbsp;Handles client interaction - binary data.
 *		<li>ClientWriteHandler [Optional Class]<br>
 * 		   &nbsp;Handles client interaction - writing data (Only used in non-blocking mode).
 * 		<li>ClientAuthenticationHandler [Optional Class]<br>
 * 			&nbsp;Used to Authencatet a client.
 * 		<li>ClientData [Optional Class]<br>
 * 			&nbsp;Client data carrier (support class)
 *		<li>ClientExtendedEventHandler [Optional Class]<br>
 * 		   &nbsp;Handles extended client events.
 * 	</ul>
 *
 * [#] = Any one of these have to be set based on default DataMode for input. 
 * The default DataMode for input is String so if not changes you will
 * have to set ClientCommandHandler.
 * </p>
 * <p>
 *  Eg:
 * <code><BLOCKQUOTE><pre>
package echoserver;

import org.quickserver.net.*;
import org.quickserver.net.server.*;

import java.io.*;

public class EchoServer {
	public static void main(String args[])	{
		String cmdHandle = "echoserver.EchoCommandHandler";
	
		QuickServer myServer = new QuickServer();
		myServer.setClientCommandHandler(cmdHandle);
		myServer.setPort(4123);
		myServer.setName(Echo Server v1.0");
		try {
			myServer.startServer();
		} catch(AppException e) {
			System.err.println("Error in server : "+e);
			e.printStackTrace();
		}
	}
}
</pre></BLOCKQUOTE></code></p>
 * 
 * @version 1.4.7
 * @author Akshathkumar Shetty
 */
public class QuickServer implements Runnable, Service, Cloneable, Serializable {
	//Some variable are not initialised to any value because the 
	//default java value was desired initial value. 

	//'dev ' = development build not yet final
	//'beta' = test build all features
	private final static String VER = "1.4.7";//change also in QSAdminMain
	private final static String NEW_LINE = "\r\n";

	static {
		System.out.print("Loading QuickServer v"+getVersion()+" ");
	}

	private String serverBanner;

	private String clientAuthenticationHandlerString; //v1.4.6
	private String clientEventHandlerString; //v1.4.6
	private String clientExtendedEventHandlerString; //v1.4.6
	private String clientCommandHandlerString;
	private String clientObjectHandlerString; //v1.2
	private String clientBinaryHandlerString; //v1.4
	private String clientWriteHandlerString; //v1.4.5
	private String clientDataString;
	
	private Authenticator authenticator;
	private ClientAuthenticationHandler clientAuthenticationHandler; //v1.4.6
	private ClientEventHandler clientEventHandler; //v1.4.6
	private ClientExtendedEventHandler clientExtendedEventHandler; //v1.4.6
	private ClientCommandHandler clientCommandHandler;
	private ClientObjectHandler clientObjectHandler; //v1.2
	private ClientBinaryHandler clientBinaryHandler; //v1.4
	private ClientWriteHandler clientWriteHandler; //v1.4.5
	private ClientData clientData;
	protected Class clientDataClass;

	private int serverPort = 9876;
	private Thread t; //Main thread
	private ServerSocket server;
	private String serverName = "QuickServer";
	private long maxConnection = -1;
	private int socketTimeout = 60 * 1000; //1 min socket timeout
	private String maxConnectionMsg = "-ERR Server Busy. Max Connection Reached";	
	private String timeoutMsg = "-ERR Timeout";
	private String maxAuthTryMsg = "-ERR Max Auth Try Reached";
	private int maxAuthTry = 5; //v1.2	

	static {
		System.out.print(".");
	}

	//--v1.1
	private InetAddress ipAddr;
	private boolean stopServer;
	private Object[] storeObjects;
	private QSAdminServer adminServer;

	//--v1.2
	//Logger for QuickServer
	private static final Logger logger = Logger.getLogger(QuickServer.class.getName());
	//Logger for the application using this QuickServer
	private Logger appLogger;

	//for Service interface
	private long suspendMaxConnection; //backup
	private String suspendMaxConnectionMsg; //backup
	private int serviceState = Service.UNKNOWN;

	static {
		System.out.print(".");
	}

	//--v1.3
	private QuickServerConfig config = new QuickServerConfig();
	private String consoleLoggingformatter;
	private String consoleLoggingLevel = "INFO";
	private ClientPool pool;
	private ObjectPool clientHandlerPool;
	private ObjectPool clientDataPool;
	private DBPoolUtil dBPoolUtil;

	//--v1.3.1
	private String loggingLevel = "INFO";

	//--v1.3.2
	private boolean skipValidation = false;
	private boolean communicationLogging = true;

	//--v1.3.3
	private String securityManagerClass;
	private AccessConstraintConfig accessConstraintConfig;
	private ClassLoader classLoader;
	private String applicationJarPath;
	private ServerHooks serverHooks;
	private ArrayList listOfServerHooks;

	static {
		System.out.print(".");
	}
	
	//--v1.4.0
	private Secure secure;
	private BasicServerConfig basicConfig = config;
	private SSLContext sslc;
	private KeyManager km[] = null;
	private TrustManager tm[] = null;
	private boolean runningSecure = false;
	private SecureStoreManager secureStoreManager = null;
	
	private Exception exceptionInRun = null;

	//--v1.4.5
	private ServerSocketChannel serverSocketChannel;
	private Selector selector;
	private boolean blockingMode = true;
	private ObjectPool byteBufferPool;
	private java.util.Date lastStartTime;
	private ClientIdentifier clientIdentifier;
	private GhostSocketReaper ghostSocketReaper;
	private PoolManager poolManager;
	private QSObjectPoolMaker qsObjectPoolMaker;

	//--v1.4.6
	private DataMode defaultDataModeIN = DataMode.STRING;
	private DataMode defaultDataModeOUT = DataMode.STRING;

	//-v1.4.7
	private Throwable serviceError;
	private Map registerChannelRequestMap;

	static {
		System.out.println(" Done");
		//should be commented if not a patch release
		//System.out.println("[Includes patch(#): t=152&p=532]");
		//should be commented if not a dev release
		//System.out.println("[Dev Build Date: Saturday, October 29, 2005]");
	}
	
	/** Returns the version of the library. */
	public static final String getVersion() {
		return VER;
	}

	/** 
	 * Returns the numerical version of the library.
	 * @since 1.2
	 */
	public static final float getVersionNo() {
		return getVersionNo(VER);
	}

	/** 
	 * Returns the numerical version of the library.
	 * @since 1.4.5
	 */
	public static final float getVersionNo(String ver) {
		//String ver = getVersion();
		float version = 0;
		int i = ver.indexOf(" "); //check if beta
		if(i == -1)
			i = ver.length();
		ver = ver.substring(0, i);
		
		i = ver.indexOf("."); //check for sub version
		if(i!=-1) {
			int j = ver.indexOf(".", i);
			if(j!=-1) {
				ver = ver.substring(0, i)+"."+
					MyString.replaceAll(ver.substring(i+1), ".", "");
			}
		}

		try	{
			version = Float.parseFloat(ver);	
		} catch(NumberFormatException e) {
			throw new RuntimeException("Corrupt QuickServer");
		}
		return version;
	}

	/**
	 * Returns the new line string used by QuickServer.
	 * @since 1.2
	 */
	public static String getNewLine() {
		return NEW_LINE;
	}

	/**
     * Returns the Server name : port of the QuickServer.
     */
	public String toString() {
		return serverName + " : " + getPort();
	}

	/**
	 * Creates a new server without any configuration.
	 * Make sure you configure the QuickServer, before 
	 * calling startServer()
	 * @see org.quickserver.net.server.ClientEventHandler
	 * @see org.quickserver.net.server.ClientCommandHandler
	 * @see org.quickserver.net.server.ClientObjectHandler
	 * @see org.quickserver.net.server.ClientBinaryHandler
 	 * @see org.quickserver.net.server.ClientWriteHandler
	 * @see org.quickserver.net.server.ClientAuthenticationHandler
	 * @see org.quickserver.net.server.ClientHandler
 	 * @see #configQuickServer
	 * @see #initService
	 * @see #setPort
	 * @see #setClientCommandHandler
	 * @since 1.2
	 */
	public QuickServer() {
	}

	/**
	 * Creates a new server with the specified  
	 * <code>commandHandler</code> has it {@link ClientCommandHandler}.
	 * @param commandHandler the fully qualified name of the 
	 *  desired class that implements {@link ClientCommandHandler}
	 *
	 * @see org.quickserver.net.server.ClientCommandHandler
	 * @see org.quickserver.net.server.ClientAuthenticationHandler
	 * @see org.quickserver.net.server.ClientHandler
	 * @see #setPort
	 */
	public QuickServer(String commandHandler) {
		setClientCommandHandler(commandHandler);
	}

	/**
	 * Creates a new server at <code>port</code> with the specified  
	 * <code>commandHandler</code> has it {@link ClientCommandHandler}.
	 *
	 * @param commandHandler fully qualified name of the class that
	 * implements {@link ClientCommandHandler}
	 * @param port to listen on.
	 *
	 * @see org.quickserver.net.server.ClientCommandHandler
	 * @see org.quickserver.net.server.ClientAuthenticationHandler
	 * @see org.quickserver.net.server.ClientHandler
	 */
	public QuickServer(String commandHandler,int port) {
		this(commandHandler); //send to another constructor
		setPort(port);		
	}

	/**
	 * Starts the QuickServer.
	 *
	 * @exception org.quickserver.net.AppException 
	 *  if Server already running or if it could not load the classes
	 *  [ClientCommandHandler, ClientAuthenticationHandler, ClientData].
	 * @see #startService
	 */
	public void startServer() throws AppException {
		logger.fine("Starting "+getName());

		if(isClosed() == false) {
			logger.warning("Server "+getName()+" already running.");
			throw new AppException("Server "+getName()+" already running.");
		}
		
		if(serverBanner == null) {
			serverBanner = "\n-------------------------------" + 
				           "\n Name : " + getName() +
						   "\n Port : " + getPort() + 
						   "\n-------------------------------\n";
			logger.finest("Default Server Banner Generated");
		}
		try	{
			loadApplicationClasses();

			//load class from Advanced Settings
			Class clientIdentifierClass = 
				getClass(getBasicConfig().getAdvancedSettings().getClientIdentifier(), true);
			clientIdentifier = (ClientIdentifier) 
				clientIdentifierClass.newInstance();
			clientIdentifier.setQuickServer(QuickServer.this);

			//load class from ObjectPoolConfig
			Class poolManagerClass = 
				getClass(getBasicConfig().getObjectPoolConfig().getPoolManager(), true);
			poolManager = (PoolManager) poolManagerClass.newInstance();

			//load class QSObjectPoolMaker
			Class qsObjectPoolMakerClass = getClass(
				getBasicConfig().getAdvancedSettings().getQSObjectPoolMaker(), true);
			qsObjectPoolMaker = (QSObjectPoolMaker) qsObjectPoolMakerClass.newInstance();

			loadServerHooksClasses();
			processServerHooks(ServerHook.PRE_STARTUP);
			
			if(getSecure().isLoad()==true)
				loadSSLContext(); //v1.4.0

			loadBusinessLogic();
		} catch(ClassNotFoundException e) {
			logger.severe("Could not load class/s : " + e.getMessage());
			throw new AppException("Could not load class/s : " + e.getMessage());
		} catch(InstantiationException e) {
			logger.severe("Could not instantiate class/s : " + e.getMessage());
			throw new AppException("Could not instantiate class/s : "+e.getMessage());
		} catch(IllegalAccessException e) {
			logger.severe("Illegal access to class/s : " + e.getMessage());
			throw new AppException("Illegal access to class/s : " + e.getMessage());
		} catch(IOException e) {
			logger.severe("IOException : " + e.getMessage());
			logger.fine("StackTrace:\n"+MyString.getStackTrace(e));
			throw new AppException("IOException : " + e.getMessage());
		} catch(Exception e) {
			logger.severe("Exception : " + e.getMessage());
			logger.fine("StackTrace:\n"+MyString.getStackTrace(e));
			throw new AppException("Exception : " + e);
		}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a人片在线不卡一二三区| 亚洲大型综合色站| 欧美精品第一页| 大白屁股一区二区视频| 亚洲v中文字幕| 亚洲婷婷综合久久一本伊一区| 精品日韩99亚洲| 欧美日韩国产高清一区二区| www.欧美亚洲| 懂色av中文一区二区三区| 麻豆精品在线播放| 午夜精品久久一牛影视| 亚洲欧美日韩综合aⅴ视频| 国产日韩欧美一区二区三区综合| 欧美精品乱码久久久久久| 色妞www精品视频| 成人午夜av在线| 国产精品一级在线| 免费三级欧美电影| 日韩电影一二三区| 亚洲国产日韩一区二区| 亚洲黄色录像片| 亚洲人成精品久久久久久| 欧美国产日本视频| 国产日产精品1区| 久久综合色8888| 精品国产污污免费网站入口| 91麻豆精品91久久久久久清纯| 欧美日韩一区二区在线视频| 91久久一区二区| 色视频欧美一区二区三区| 色哟哟国产精品| 一道本成人在线| 色婷婷精品久久二区二区蜜臀av| 9i看片成人免费高清| 成人av高清在线| www.色精品| 色偷偷久久人人79超碰人人澡| 99视频精品免费视频| 99这里只有精品| 97se亚洲国产综合自在线不卡| 成人福利视频网站| 99国产精品久久| 欧美亚洲动漫另类| 69久久夜色精品国产69蝌蚪网| 51久久夜色精品国产麻豆| 日韩无一区二区| 精品sm在线观看| 国产精品三级久久久久三级| 国产精品电影一区二区| 一区二区三区在线免费播放| 一区二区三区不卡在线观看| 亚洲第一综合色| 美国毛片一区二区| 国产一区二区女| 国产成人精品免费| 91小视频免费看| 欧日韩精品视频| 欧美一区二区三区视频在线观看| 精品国产凹凸成av人网站| 久久精品亚洲精品国产欧美| 中文字幕在线不卡一区| 亚洲午夜一二三区视频| 青青草国产精品97视觉盛宴| 国产原创一区二区三区| 成人av电影在线播放| 欧美日韩精品专区| 2014亚洲片线观看视频免费| 亚洲日本丝袜连裤袜办公室| 亚洲成人动漫av| 国产成人精品影视| 在线欧美日韩国产| 日韩三级精品电影久久久| 欧美国产日产图区| 亚洲午夜av在线| 国产一区二区久久| 日本乱码高清不卡字幕| 日韩色在线观看| 中文字幕在线一区二区三区| 亚洲gay无套男同| 国产露脸91国语对白| 91国偷自产一区二区开放时间| 日韩你懂的在线观看| 综合欧美亚洲日本| 麻豆91小视频| 色婷婷国产精品| 2017欧美狠狠色| 婷婷久久综合九色国产成人| 国内一区二区视频| 欧美一a一片一级一片| 精品国产免费久久| 亚洲一区二区视频在线观看| 风间由美性色一区二区三区| 欧美日韩免费电影| 中文字幕中文字幕一区二区| 裸体歌舞表演一区二区| 91老司机福利 在线| 久久一夜天堂av一区二区三区| 一区二区高清视频在线观看| 国产成人综合亚洲网站| 欧美精品aⅴ在线视频| 国产精品二区一区二区aⅴ污介绍| 美国欧美日韩国产在线播放| 欧美少妇xxx| 成人免费在线视频| 国产成都精品91一区二区三| 日韩午夜激情视频| 视频一区免费在线观看| 欧美综合亚洲图片综合区| 国产欧美视频一区二区三区| 激情综合五月婷婷| 6080yy午夜一二三区久久| 亚洲免费av观看| 成人白浆超碰人人人人| 久久久噜噜噜久久人人看| 日本强好片久久久久久aaa| 欧美视频一区二区三区在线观看 | 91美女蜜桃在线| 国产欧美一区二区精品秋霞影院| 久久成人麻豆午夜电影| 欧美精品一二三| 亚洲国产日韩在线一区模特| 在线视频亚洲一区| 亚洲欧美激情插 | 狠狠色综合日日| 精品国产免费人成在线观看| 美腿丝袜亚洲三区| 欧美一级黄色录像| 青青草97国产精品免费观看无弹窗版| 欧美日韩午夜在线视频| 亚洲精品免费一二三区| 色综合天天做天天爱| 亚洲另类春色校园小说| 在线视频国内一区二区| 亚洲一区二区av电影| 精品视频免费在线| 日韩av午夜在线观看| 91精品国产综合久久久蜜臀粉嫩 | 欧美性感一类影片在线播放| 亚洲一区av在线| 欧美日韩成人激情| 日韩国产精品大片| 欧美精品一区二| 国产精品系列在线观看| 国产精品色婷婷久久58| 91丨porny丨国产入口| 一区二区激情小说| 5858s免费视频成人| 看电影不卡的网站| 2021久久国产精品不只是精品| 国产乱码字幕精品高清av | 亚洲一区电影777| 91精品国产综合久久久久久久久久| 午夜欧美2019年伦理| 日韩一卡二卡三卡四卡| 国产一区二区三区av电影| 国产精品家庭影院| 欧美又粗又大又爽| 奇米777欧美一区二区| 久久这里只有精品6| 成人性生交大片| 亚洲午夜日本在线观看| 日韩一区二区电影| 成人午夜碰碰视频| 亚洲精品视频一区二区| 91.麻豆视频| 国产精品中文有码| 亚洲女与黑人做爰| 欧美一卡二卡在线| 国产91在线看| 亚洲一区二区三区四区不卡| 精品国产三级电影在线观看| 99精品热视频| 青草av.久久免费一区| 欧美国产日韩一二三区| 欧美人牲a欧美精品| 国产呦精品一区二区三区网站| 成人欧美一区二区三区| 日韩欧美一级在线播放| www.色精品| 麻豆国产一区二区| ㊣最新国产の精品bt伙计久久| 91精品国产aⅴ一区二区| 成人性生交大片免费| 日韩av高清在线观看| 国产精品美女www爽爽爽| 欧美一区二区黄色| 色综合天天性综合| 蜜臀av一区二区在线免费观看| 亚洲日本在线a| 久久久精品免费免费| 欧美日韩国产免费| 不卡av电影在线播放| 激情图片小说一区| 一区二区三区欧美在线观看| 久久免费视频一区| 欧美一区二区三区思思人| 色婷婷激情一区二区三区| 国产风韵犹存在线视精品| 青青草国产成人av片免费|