下面以实际的例子来说明它的简洁。
环境:win7、myeclipse6.5、
jar包:log4j-1.2.13.jar、QuickServer.jar、commons-pool-1.3.jar。
程序如下,新建一web工程
结构图如上所示。
新建一servlet在工程启动时启动加载该类,已启动QuickServer。
CoreServlet.java
package com.server; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import org.quickserver.net.AppException; import org.quickserver.util.xmlreader.QuickServerConfig; public class CoreServlet extends HttpServlet { public SyncServer syncServer; /** * Constructor of the object. */ public CoreServlet() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { System.out.println("[HTTP Shutting down]"); super.destroy(); } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { System.out.println("[system init started]"); QuickServerConfig cfg = new QuickServerConfig(); cfg.setClientEventHandler("com.server.SyncCommandHandler"); cfg.setClientCommandHandler("com.server.SyncCommandHandler"); cfg.setBindAddr("0.0.0.0"); cfg.setPort(5557); cfg.setName("SyncServer"); cfg.getAdvancedSettings().setCharset("GBK"); syncServer = new SyncServer(cfg); try { syncServer.start(); } catch (AppException e) { e.printStackTrace(); } } }
在web.xml中配置servlet
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>CoreServlet</servlet-name> <servlet-class>com.server.CoreServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CoreServlet</servlet-name> <url-pattern>/servlet/CoreServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
紧接着我们要实现以下SyncServer类,SyncServer.java
package com.server; import org.quickserver.net.AppException; import org.quickserver.net.server.QuickServer; import org.quickserver.util.xmlreader.QuickServerConfig; public class SyncServer { private QuickServer secureServer; //quickserver配置 private QuickServerConfig serverConfig; public SyncServer(QuickServerConfig serverConfig){ this.serverConfig = serverConfig; } public void start() throws AppException{ secureServer = new QuickServer(); secureServer.initServer(serverConfig); secureServer.startServer(); } public void stop() throws AppException{ if (secureServer != null) secureServer.stopServer(); } }
到这儿我们还得实现以下QuickServer的两个类,ClientEventHandler和ClientCommandHandler。很简单的程序如下SyncCommandHandler.java
package com.server; import java.io.IOException; import java.net.SocketTimeoutException; import org.apache.log4j.Logger; import org.quickserver.net.server.ClientCommandHandler; import org.quickserver.net.server.ClientEventHandler; import org.quickserver.net.server.ClientHandler; public class SyncCommandHandler implements ClientEventHandler,ClientCommandHandler { public void closingConnection(ClientHandler arg0) throws IOException { System.out.println("[closingConnection]" + arg0.getSocket().getInetAddress()); } public void gotConnected(ClientHandler arg0) throws SocketTimeoutException,IOException { System.out.println("[gotConnected]" + arg0.getSocket().getInetAddress()); } public void lostConnection(ClientHandler arg0) throws IOException { System.out.println("[gotConnected]" + arg0.getSocket().getInetAddress()); } public void handleCommand(ClientHandler arg0, String arg1)throws SocketTimeoutException, IOException { //处理事件 System.out.println("Request Content: " + arg1); //对接收到的数据arg1进行处理 //...... } }
在上述代码中,注释的地方arg1就是接受到的请求内容。可以对它进行处理。
一个socket服务端就这么简单做好了。
至于工程结构中的MessageEventFactory.java类是我处理数据的类。没有必要写下来。