`
WChao226
  • 浏览: 27818 次
  • 性别: 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;
}
分享到:
评论

相关推荐

    oracle删除和重建实例

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

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

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

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

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

    Visual C# .NET精彩编程实例集锦

    实例1 如何使用错误提醒控件 实例2 如何使用信息提示控件 实例3 如何使用菜单控件 实例4 如何使用工具栏控件 实例5 如何使用状态栏控件 实例6 如何使用托盘控件 实例7 如何使用标签页控件 实例8 如何使用进度条控件 ...

    sqlserver2008R2应用添加实例步骤

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

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

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

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

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

    j2ee实例 j2ee实例j2ee实例

    本实例集合将深入探讨J2EE的核心概念和技术,帮助开发者更好地理解和应用J2EE。 首先,J2EE的核心组件包括Servlet、JavaServer Pages (JSP)、JavaBean、EJB(Enterprise JavaBeans)、JMS(Java Message Service)...

    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++编程技能。 ...

    js实例大全 js实例

    本"JS实例大全"聚焦于展示JavaScript在实际应用中的各种功能和技巧,帮助开发者更好地理解和掌握这门语言。 一、基础语法与数据类型 JavaScript的基础语法包括变量声明(var、let、const)、数据类型(如字符串、...

    MCGS高级教程实例模板

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

    《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 ...

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

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

    opengl 实例实例实例实例实例

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

    51单片机Proteus仿真实例 闪烁LED

    51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机...

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

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

    【gpio详解及应用实例】gpio详解及应用实例gpio详解及应用实例

    gpiogpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用...

Global site tag (gtag.js) - Google Analytics