`
WChao226
  • 浏览: 27624 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

minaTcp实例

阅读更多
tcp连接协议实例。
完整代码请在附件中下载。

直接先启动服务端,再启动客户端即可

//服务端打印信息为:
[10:49:57] main INFO  [] [] [com.tcp.server.TcpServer] - Starting Server.... and then Listening on:8880
[10:49:57] main INFO  [] [] [com.tcp.server.TcpServer] - Server listening on 8880
[10:50:58] NioProcessor-2 INFO  [] [] [com.tcp.server.TcpServer] - 服务端:sessionCreated...2015-09-30 10:50:58
[10:50:58] pool-3-thread-1 INFO  [] [] [com.tcp.server.TcpServer] - 服务端:sessionOpened...2015-09-30 10:50:58
服务端:messageReceived...sessionCreated客户端--Wed Sep 30 10:50:58 CST 2015
[10:50:58] pool-3-thread-1 INFO  [] [] [com.tcp.server.TcpServer] - 服务端:messageSent...2015-09-30 10:50:58
[10:51:00] pool-3-thread-2 INFO  [] [] [com.tcp.server.TcpServer] - 服务端:messageSent...2015-09-30 10:51:00
[10:51:01] pool-3-thread-1 INFO  [] [] [com.tcp.server.TcpServer] - 服务端:sessionClosed...2015-09-30 10:51:01

//客户端打印信息为:
Starting client.... and then connect to-- 127.0.0.1:8880
客户端:sessionCreated...
客户端:sessionOpened...
客户端:messageSent...
客户端:Client ---messageReceived...
客户端:来至服务器的消息:{"name":"aobama"}   name:aobama
客户端:Client ---messageReceived...
客户端:exceptionCaught...



服务端Server代码
package com.tcp.server;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.util.concurrent.Executors;

import org.apache.log4j.Logger;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.executor.ExecutorFilter;
import org.apache.mina.filter.firewall.BlacklistFilter;
import org.apache.mina.filter.logging.LogLevel;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.SocketSessionConfig;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

import com.tcp.GlobalParam;

/**
 * 
 * @author wangchao
 * @Version 1.0
 * @date 2015-9-30 上午10:22:21
 */
public class TcpServer {
//	private static final Logger logger = LoggerFactory.getLogger(TcpServer.class);
	private static final Logger logger = Logger.getLogger(TcpServer.class);
	
	
	/**
	 * 初始化服务  整行传输--new TextLineCodecFactory(Charset.forName( "UTF-8" ))
	 * @throws IOException
	 */
	public static void initialize() throws IOException {
	    // Create an Acceptor
	    NioSocketAcceptor acceptor = new NioSocketAcceptor();
	    // Add Handler
	    acceptor.setHandler(new TcpServerHandler());
	    //过滤器链
	    DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
	    //日志
	    LoggingFilter loggingFilter = new LoggingFilter();
        loggingFilter.setSessionClosedLogLevel(LogLevel.NONE);
        loggingFilter.setSessionCreatedLogLevel(LogLevel.DEBUG);
        loggingFilter.setSessionOpenedLogLevel(LogLevel.INFO);
        loggingFilter.setExceptionCaughtLogLevel(LogLevel.ERROR);
	    chain.addLast("logging", loggingFilter);
	    //黑名单
	    InetAddress[] addressArr = new InetAddress[]{};
	    BlacklistFilter blackList = new BlacklistFilter();
	    blackList.setBlacklist(addressArr);
	    chain.addLast("blackList", blackList);
	    //编码解码过滤器--普通字符串
	    chain.addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName( "UTF-8" ))));
	    //线程池
	    chain.addLast("threadPool",new ExecutorFilter(Executors.newCachedThreadPool()));
	    //session配置
	    SocketSessionConfig cfg = acceptor.getSessionConfig();
	    cfg.setReuseAddress(true);//设置复用地址
	    cfg.setReadBufferSize(GlobalParam.READ_BUFFER_SIZE);//读
	    cfg.setSendBufferSize(GlobalParam.SEND_BUFFER_SIZE);//写
	    cfg.setReceiveBufferSize(GlobalParam.RECEIVE_BUFFER_SIZE);//收
	    cfg.setIdleTime(IdleStatus.BOTH_IDLE, 2);
	    
        logger.info("Starting Server.... and then Listening on:"+GlobalParam.TCP_SHORT_SERVER_PORT);
        //Bind地址
        acceptor.bind(new InetSocketAddress(GlobalParam.TCP_SHORT_SERVER_PORT));
        logger.info("Server listening on "+GlobalParam.TCP_SHORT_SERVER_PORT);
	}

	
	
	public static void main(String[] args) {
		try {
			initialize();
		} catch (IOException e) {
	        logger.error("start Server is throw Exception ",e);
		}
	}
}

服务端Handler代码:
package com.tcp.server;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

/**
 * 
 * @author wangchao
 * @Version 1.0
 * @date 2015-9-30 上午10:22:14
 */
public class TcpServerHandler implements IoHandler{
	private static final Logger logger = Logger.getLogger(TcpServer.class);
	
	@Override
	public void exceptionCaught(IoSession session, Throwable e)
			throws Exception {
		logger.debug(e.getMessage(),e);
//		e.printStackTrace();
	}

	@Override
	public void messageReceived(IoSession session, Object msg) throws Exception {
		System.out.println("服务端:messageReceived..."+msg.toString());
		session.write("{\"name\":\"aobama\"}");
	}

	@Override
	public void messageSent(IoSession arg0, Object arg1) throws Exception {
		// TODO Auto-generated method stub
		logger.info("服务端:messageSent..."+getCurrentDate());
	}

	@Override
	public void sessionClosed(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub
		logger.info("服务端:sessionClosed..."+getCurrentDate());
	}

	@Override
	public void sessionCreated(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub
//		System.out.println("sessionCreated...");
		logger.info("服务端:sessionCreated..."+getCurrentDate());
	}

	@Override
	public void sessionIdle(IoSession session, IdleStatus arg1) throws Exception {
		// TODO Auto-generated method stub
		session.write("idle--"+getCurrentDate());
//		logger.info("sessionIdle "+CommonsUtils.getCurrentDate());
	}

	@Override
	public void sessionOpened(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub
		logger.info("服务端:sessionOpened..."+getCurrentDate());
	}
	@Override
	public void inputClosed(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub
		
	}

	private static String getCurrentDate(){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		return sdf.format(new Date());
	}
}

客户端Client代码:
package com.tcp.client;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.util.concurrent.Executors;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.executor.ExecutorFilter;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.SocketSessionConfig;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.tcp.GlobalParam;
import com.tcp.server.TcpServer;

/**
 * 
 * @author wangchao
 * @Version 1.0
 * @date 2015-9-30 上午10:21:59
 */
public class TcpClientDemo {
	private static final Logger logger = LoggerFactory.getLogger(TcpServer.class);
	
	public static void connectServer() throws IOException {
	    // Create an Acceptor
	    NioSocketConnector connector = new NioSocketConnector();
	    // Add Handler
	    connector.setHandler(new TcpClientDemoHandler());

	    //过滤器链
	    DefaultIoFilterChainBuilder chain = connector.getFilterChain();
	    //日志
	    chain.addLast("logging", new LoggingFilter());
	    //编码解码过滤器 Http
//	    chain.addLast("http",new HttpClientCodec());
	    chain.addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName( "UTF-8" ))));
//	    connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new MyProtocalCodecFactory("UTF-8")));
		//线程池
	    chain.addLast("threadPool", new ExecutorFilter(Executors.newCachedThreadPool()));
        
	    // Create Session Configuration
	    SocketSessionConfig cfg = connector.getSessionConfig();
        cfg.setReuseAddress(true);
        cfg.setReadBufferSize(GlobalParam.READ_BUFFER_SIZE);
        cfg.setReceiveBufferSize(GlobalParam.RECEIVE_BUFFER_SIZE);
//        cfg.setIdleTime(IdleStatus.BOTH_IDLE, 2);
	    
        logger.info("Starting client......");
        System.out.println("Starting client.... and then connect to-- "+GlobalParam.TCP_SHORT_SERVER_HOST+":"+GlobalParam.TCP_SHORT_SERVER_PORT);
        // Bind and be ready to listen
        ConnectFuture cf = connector.connect(new InetSocketAddress(GlobalParam.TCP_SHORT_SERVER_HOST,GlobalParam.TCP_SHORT_SERVER_PORT));
        //
//      cf.awaitUninterruptibly();
//	    connector.dispose();
	}
	

	public static void main(String[] args) {
		try {
			connectServer();
		} catch (IOException e) {
//			e.printStackTrace();
	        logger.error("start Server is throw Exception ",e);
		}
	}
}

客户端Handler代码:
package com.tcp.client;

import java.util.Date;

import net.sf.json.JSONObject;

import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

/**
 * 
 * @author wangchao
 * @Version 1.0
 * @date 2015-9-30 上午10:22:06
 */
public class TcpClientDemoHandler implements IoHandler{

	@Override
	public void exceptionCaught(IoSession arg0, Throwable arg1)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("客户端:exceptionCaught...");
	}

	@Override
	public void messageReceived(IoSession session, Object msg) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("客户端:Client ---messageReceived...");
		 String str = msg.toString();  
         JSONObject json = JSONObject.fromObject(msg);
	     System.out.println("客户端:来至服务器的消息:"+str+"   name:"+json.getString("name"));
	        
//	     Date date = new Date();
//	     session.write(date.toString());
//	     System.out.println("Message written...");
//	     session.close(true);
	}

	@Override
	public void messageSent(IoSession session, Object arg1) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("客户端:messageSent...");
	}

	@Override
	public void sessionClosed(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("客户端:sessionClosed...");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("客户端:sessionCreated...");
		session.write("sessionCreated客户端--"+new Date().toString());
	}

	@Override
	public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("客户端:sessionIdle...");
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("客户端:sessionOpened...");
	}

	@Override
	public void inputClosed(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub
		
	}	
}


常量信息类GlobalParam.java:
package com.tcp;

/**
 * 
 * @author wangchao
 * @Version 1.0
 * @date 2015-9-30 上午9:40:49
 */
public class GlobalParam {
	/**
	 * TCP短连接地址
	 */
	public static final String TCP_SHORT_SERVER_HOST = "127.0.0.1";
	/**
	 * TCP短连接端口
	 */
	public static final int TCP_SHORT_SERVER_PORT = 8880;
	/**
	 * TCP长连接地址
	 */
	public static final String TCP_LONG_SERVER_HOST = "127.0.0.1";
	/**
	 * TCP长连接端口
	 */
	public static final int TCP_LONG_SERVER_PORT = 8881;
	/**
	 * HTTP连接地址
	 */
	public static final String HTTP_SERVER_HOST = "127.0.0.1";
	/**
	 * HTTP连接端口
	 */
	public static final int HTTP_SERVER_PORT = 8882;
	
	
	
	
	/**
	 * 读-缓冲区大小,一次(2048byte)2K
	 */
	public static final int READ_BUFFER_SIZE = 2048;
	/**
	 * 写-缓冲区大小,一次(2048byte)2K
	 */
	public static final int SEND_BUFFER_SIZE = 2048;
	/**
	 * 收-缓冲区大小,一次(2048byte)2K
	 */
	public static final int RECEIVE_BUFFER_SIZE = 2048;
}
分享到:
评论

相关推荐

    SQL数据库默认实例与命名实例的区别

    ### SQL数据库默认实例与命名实例的区别 在SQL Server中,实例是服务器上SQL Server服务的具体实现。当安装SQL Server时,可以选择安装默认实例或者命名实例。这两种实例类型各有其特点和适用场景,本文将深入探讨...

    oracle删除和重建实例

    删除和重建 Oracle 实例 Oracle 数据库是一种关系型数据库管理系统,广泛应用于企业级数据库应用中。然而,在某些情况下,我们需要删除和重建 Oracle 实例,以便解决一些问题或进行升级维护。在这篇文章中,我们将...

    Proteus单片机仿真实例源码大全C51单片机Proteus仿真例程学习实例源代码(150例).zip

    Proteus单片机仿真实例源码-32x16汉字.zip Proteus单片机仿真实例源码-44行列键盘.rar Proteus单片机仿真实例源码-44行列键盘.zip Proteus单片机仿真实例源码-485全双工通信.rar Proteus单片机仿真实例源码-485全...

    vba实例vba实例vba实例vba实例vba实例vba实例

    vba实例vba实例vba实例vba实例vba实例vba实例vba实例vba实例vba实例vba实例

    OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例

    OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例

    sqlserver2008R2应用添加实例步骤

    ### SQL Server 2008 R2 添加实例的详细步骤 #### 一、概述 SQL Server 2008 R2 是一款强大的关系型数据库管理系统,广泛应用于企业级数据管理和处理场景。对于需要在同一台服务器上运行多个独立的SQL Server环境...

    QT5开发及实例配套源代码.zip

    QT5开发及实例配套[源代码] Qt是诺基亚公司的C++可视化开发平台,本书以Qt 5作为平台,每个章节在简单介绍开发环境的基础上,用一个小实例,介绍Qt 5应用程序开发各个方面,然后系统介绍Qt 5应用程序的开发技术,...

    数据结构实例(内含17个详细经典实例)

    数据结构实践教程:内含17个经典数据结构实例 根据五个不同数据结构,对每个结构都有2~4个经典实例。每个实例都有项目简介、设计思路、数据结构、完整程序、运行结果五个部分,可以直接拿来做一篇课程设计。实例名称...

    ad域简介及应用实例及实例分析.txtad域简介及应用实例及实例分析.txt

    ad域ad域简介及应用实例及实例分析.txtad域简介及应用实例及实例分析.txtad域简介及应用实例及实例分析.txtad域简介及应用实例及实例分析.txtad域简介及应用实例及实例分析.txtad域简介及应用实例及实例分析.txtad域...

    vf实例大全vf实例大全vf实例大全

    在本文中,我们将深入探讨VF实例大全,涵盖其核心概念、功能以及实际应用。 VF实例大全旨在帮助用户理解并掌握VF的各种操作和编程技巧。这可能包括创建数据库、表设计、查询构建、报表制作、菜单设计、窗体开发以及...

    MCGS高级教程实例模板

    MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板...

    labview55个经典实例

    下面我们将围绕"LabVIEW 55个经典实例"这一主题,探讨这些实例可能涵盖的知识点,以及它们如何帮助用户提升LabVIEW技能。 1. **基础编程概念**:这55个实例可能会包含基础的编程概念,如循环(For Loop, While Loop...

    java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java

    java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象...

    C++编程实例100篇

    《C++编程实例100篇》是一本深入浅出的C++编程教程,它以实践为主导,通过丰富的实例帮助学习者掌握C++语言的基础和核心概念。这本书的每个实例都精心设计,旨在帮助初学者和有经验的开发者巩固和提升C++编程技能。 ...

    最新单片机仿真 8255并行口扩展实例

    最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例...

    《Visual Basic 2008应用程序开发实例精讲》全书所有实例程序源代码

    第2篇 数据库应用开发实例 第3章 家庭理财系统54 3.1 实例功能说明54 3.2 系统设计方案55 3.2.1 模块设计及开发环境55 3.2.2 系统结构图55 3.2.3 数据库设计56 3.3 相关技术点拨58 3.3.1 ado.net数据库访问技术58 ...

    STRUTS实例STRUTS实例

    STRUTS实例STRUTS实例STRUTS实例STRUTS实例

    sakuracat简介及应用实例及实例分析.txt简介及应用实例及实例分析.txt

    githubsakuracat简介及应用实例及实例分析.txt简介及应用实例及实例分析.txtsakuracat简介及应用实例及实例分析.txt简介及应用实例及实例分析.txtsakuracat简介及应用实例及实例分析.txt简介及应用实例及实例分析....

    opengl 实例实例实例实例实例

    opengl 实例实例实例实例实例opengl 实例实例实例实例实例

Global site tag (gtag.js) - Google Analytics