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

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

?? quickserver.java

?? 一個(gè)用java編寫的服務(wù)器,對(duì)于學(xué)習(xí)網(wǎng)絡(luò)編程的人來說是個(gè)很好的例子
?? JAVA
?? 第 1 頁 / 共 5 頁
字號(hào):
/*
 * 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
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品日韩综合观看成人91| 国产精品资源在线| 国内成+人亚洲+欧美+综合在线| 福利91精品一区二区三区| 欧美视频第二页| 欧美国产一区在线| 美国精品在线观看| 欧美在线观看一区二区| 国产三级精品三级| 美腿丝袜一区二区三区| 91久久香蕉国产日韩欧美9色| 久久综合国产精品| 丝袜美腿亚洲色图| 色天天综合色天天久久| 亚洲国产精品二十页| 美女看a上一区| 欧美日韩免费一区二区三区视频| 中文成人av在线| 精品无人码麻豆乱码1区2区 | 国产精品白丝jk白祙喷水网站 | 成人app软件下载大全免费| 欧美一区二区精美| 调教+趴+乳夹+国产+精品| 成人小视频在线| www国产成人| 老司机一区二区| 欧美丰满嫩嫩电影| 天使萌一区二区三区免费观看| 欧美中文字幕一区| 亚洲综合区在线| 91国模大尺度私拍在线视频| 一色屋精品亚洲香蕉网站| 国产成人免费在线观看不卡| 久久亚洲欧美国产精品乐播 | 亚洲欧美日韩一区二区| bt7086福利一区国产| 国产精品毛片a∨一区二区三区| 国产一二三精品| 久久久综合视频| 国产精品一级二级三级| 国产日韩欧美亚洲| 波多野结衣亚洲一区| 自拍偷拍欧美精品| 色综合天天综合| 一区二区三区鲁丝不卡| 欧美日韩中文一区| 日本va欧美va瓶| 精品少妇一区二区三区在线播放 | 欧美成人三级在线| 国产精品一区二区无线| 国产精品嫩草久久久久| 91高清视频在线| 五月婷婷综合激情| 欧美一级免费大片| 激情综合网激情| 欧美激情综合网| 在线免费观看日本一区| 美女一区二区视频| 国产午夜精品一区二区三区嫩草| 成人开心网精品视频| 一级中文字幕一区二区| 日韩欧美中文一区二区| 福利电影一区二区| 亚洲成av人影院| 26uuu国产日韩综合| 91在线免费看| 久久精品国产久精国产爱| 国产午夜亚洲精品不卡| 欧美怡红院视频| 捆绑调教美女网站视频一区| 中文欧美字幕免费| 欧美色倩网站大全免费| 国内精品视频666| 一区二区三区自拍| 久久丝袜美腿综合| 一本大道av伊人久久综合| 欧美aaaaaa午夜精品| 国产精品萝li| 日韩一级片网址| 97se亚洲国产综合自在线| 秋霞国产午夜精品免费视频| 国产精品久久久久久户外露出| 欧美日韩国产经典色站一区二区三区| 韩日av一区二区| 亚洲午夜精品一区二区三区他趣| 久久精品综合网| 欧美久久久久久久久| 99久久久久免费精品国产| 精品在线一区二区三区| 亚洲午夜久久久久久久久电影院| 国产精品青草综合久久久久99| 5858s免费视频成人| 色屁屁一区二区| 国产精品一区二区男女羞羞无遮挡| 五月婷婷久久丁香| 一个色综合网站| 亚洲免费观看高清完整版在线观看熊| 久久综合色天天久久综合图片| 欧美精品在线一区二区三区| 一本久久综合亚洲鲁鲁五月天| 国产精品一区二区无线| 韩国精品主播一区二区在线观看| 亚洲国产精品视频| 亚洲一区二区三区中文字幕 | 99久久综合狠狠综合久久| 老司机精品视频导航| 日日欢夜夜爽一区| 亚洲一本大道在线| 亚洲国产综合色| 亚洲欧美视频在线观看| 椎名由奈av一区二区三区| 国产精品久久久久久久岛一牛影视| 久久亚洲二区三区| 久久综合色之久久综合| 精品国产一区久久| 久久久噜噜噜久久人人看 | 肉丝袜脚交视频一区二区| 亚洲欧洲制服丝袜| 亚洲日本在线a| 曰韩精品一区二区| 亚洲v中文字幕| 五月天精品一区二区三区| 天堂va蜜桃一区二区三区 | 337p亚洲精品色噜噜噜| 91精品黄色片免费大全| 日韩一本二本av| 精品乱人伦一区二区三区| 日韩欧美国产成人一区二区| 精品成人一区二区三区四区| 国产日韩欧美激情| 亚洲色大成网站www久久九九| 亚洲欧美成aⅴ人在线观看| 亚洲免费观看高清在线观看| 亚洲成人免费视| 日本欧美一区二区| 国产原创一区二区| 91免费版pro下载短视频| 91福利在线免费观看| 欧美精品自拍偷拍动漫精品| 精品国产乱码久久久久久闺蜜| 久久网站热最新地址| 亚洲色图一区二区| 日产欧产美韩系列久久99| 国产伦精一区二区三区| 91视频一区二区| 3d动漫精品啪啪1区2区免费| 国产亚洲人成网站| 亚洲欧美日韩精品久久久久| 亚洲一区在线播放| 黑人精品欧美一区二区蜜桃| 99久久精品免费观看| 欧美日韩夫妻久久| 国产欧美日本一区二区三区| 亚洲欧美日韩一区二区三区在线观看| 日韩经典一区二区| 懂色一区二区三区免费观看| 欧美吻胸吃奶大尺度电影 | 欧美老女人在线| 欧美激情一区二区三区四区| 亚洲高清在线精品| 国产成人亚洲综合a∨婷婷 | 91麻豆精品久久久久蜜臀| 久久综合国产精品| 亚洲成人免费在线观看| 国产精品综合一区二区| 欧美日韩午夜影院| 国产精品丝袜一区| 美女精品自拍一二三四| 欧美性生交片4| 亚洲国产精品成人久久综合一区| 亚洲va欧美va天堂v国产综合| 国产麻豆9l精品三级站| 欧美性生活影院| 国产精品久久久久久久浪潮网站| 日日夜夜精品免费视频| 91在线免费播放| 欧美经典三级视频一区二区三区| 视频一区二区三区入口| 波多野结衣中文字幕一区二区三区| 欧美高清一级片在线| 亚洲自拍偷拍av| 成人精品免费看| 337p粉嫩大胆噜噜噜噜噜91av| 日韩中文字幕区一区有砖一区| jlzzjlzz欧美大全| 精品99999| 日日摸夜夜添夜夜添国产精品| 色综合久久综合网97色综合| 欧美激情一区二区三区蜜桃视频| 免费观看一级特黄欧美大片| 欧美乱熟臀69xxxxxx| 亚洲一卡二卡三卡四卡五卡| 92精品国产成人观看免费| 中文字幕电影一区| 国产成人午夜精品影院观看视频| www国产成人免费观看视频 深夜成人网| 日韩国产欧美在线观看| 欧美日韩国产综合草草| 成人免费毛片app| 久久精品人人做人人综合|