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

📄 appserver.java

📁 银行项目为后台socket通信写的程序
💻 JAVA
字号:
/****************************************************************************
 * Package		: com.ecSolutions.ecAppServer.server
 * File			: AppServer.java
 * Create Date  : 2007-7-20
 * Author		: Steven Chen
 * 
 * Copyright(C) 2006 ecSolutions(shanghai) Co.,Limited.All Rights Reserved.
 *			
 ***************************************************************************/
package com.ecSolutions.ecAppServer.server;

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;

import org.apache.log4j.Logger;

import com.ecSolutions.ecAppServer.Configuration;
import com.ecSolutions.ecAppServer.server.buffer.BufferFactory;
import com.ecSolutions.ecAppServer.server.handler.EcAppServerHandler;
import com.ecSolutions.ecAppServer.server.packet.DefaultPacket;
import com.ecSolutions.ecAppServer.server.session.SessionFactory;
import com.ecSolutions.ecAppServer.server.util.Charset;

/**
 * 
 * @author Steven Chen
 * @version $Id: AppServer.java,v 1.7 2007/07/30 02:59:02 stevenchen Exp $
 *
 */
public class AppServer implements Runnable{
	private static Logger log = Logger.getLogger("AppServer");
	private Thread runner;
	private boolean suspended;
	private Configuration config;
	private int port;
	private String hostip;
	
	private SessionAcceptor acceptor = SessionFactory.createSessionAcceptor(SessionType.TCP);
	private static final byte[] TOKEN = System.getProperty("line.separator").getBytes();
	
	/**
	 * constructor
	 * @param config 
	 */
	public AppServer(Configuration config) {
		this.config = config;		
	}

	public void run() {
		
		/*
		InetAddress lh = null;
		try {
			lh = InetAddress.getLocalHost();
		} catch (UnknownHostException e) {
			log.error("host ip address is unkown or invalid!");
		}*/ 
		
		SocketAddress socketaddress = new InetSocketAddress(hostip,port);
		acceptor.setListenAddress(socketaddress);
		//acceptor.setListenPort(port);

		final EcAppServerHandler handler = new EcAppServerHandler();
		acceptor.setAcceptorHandler(
				new SessionAcceptorHandlerAdapter() {
					public void exceptionCaught(SessionAcceptor acceptor, Throwable cause) {
						System.err.println(cause);
					}
					public void sessionAccepted(SessionAcceptor acceptor, Session session) throws Exception {
						//session.setSessionHandler(handler);
						session.setPacketDecoder(new MessageDecoder());
		                session.setPacketEncoder(new MessageEncoder());
		                //session.addSessionFilter(new ChatLogFilter());
		                session.setSessionHandler(handler);
						
						session.start();
					}

				}
		);
		acceptor.start();
		if (acceptor.isStarted())
			System.out.println("ecAppServer listen on " + acceptor.getListenAddress());
		

		
		
	}
	

	public void start() throws Exception {
		hostip = config.getString("HostIP");
		port = config.getInt("Port",9000);
		if(hostip.trim().equals("")){
			System.out.println("host ip address is unkown or not set!");
			log.error("host ip address is unkown or not set!");
			System.exit(1);
		}
		if (runner == null) {
			runner = new Thread(this);
			runner.start();
			System.out.println("Server ready ........");
			log.info("------- ecAppServer started ------");
		}else{
			System.out.println("Server is Still Runing ........");
			log.info("------- ecAppServer Still Runing ------");
		}
		
	}
	/**
	 * 停止服务器
	 */
	public void stop() {
		acceptor.close();
		runner = null;
	}
	
	/**
	 * 返回服务器是否停止
	 */
	public boolean isStopped() {
		return runner == null;
	}

	/**
	 * 挂起服务器,停止响应之后的客户端请求
	 */
	public void suspend() {
		suspended = true;
	}

	/**
	 * 回复服务器运行
	 */
	public void resume() {
		suspended = false;
	}

	/**
	 * 返回服务器是否挂起
	 */
	public boolean isSuspended() {
		return suspended;
	}
	
    private static class MessageDecoder implements PacketDecoder {

        public Object decode(Session session, Packet packet) throws Exception {
            Buffer buffer = packet.getContent();
            //buffer.asByteBuffer().
            int index = buffer.indexOf(TOKEN);
            if (index >= 0) {
                String s = buffer.getString(Charset.SYSTEM, index
                        - buffer.position());
                buffer.skip(TOKEN.length);
                return s;
            }
            return null;
        }
    }
    
    private static class MessageEncoder implements PacketEncoder {

        public Packet encode(Session session, Object obj) throws Exception {
            String s = (String) obj;
            ByteBuffer buffer = Charset.SYSTEM.encode(s);
            return new DefaultPacket(BufferFactory.allocate(buffer.remaining() + TOKEN.length).put(buffer).flip());
        }
    }

}

⌨️ 快捷键说明

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