mina在spring中的配置多个端口
本次练习中是监听2个端口
applicationContext-mina.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//spring//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean
class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="Java.net.SocketAddress">
<bean
class="org.apache.mina.integration.spring.InetSocketAddressEditor" />
</entry>
</map>
</property>
</bean>
<!--创建服务器-->
<bean id="ioAcceptor"
class="org.apache.mina.integration.spring.IoAcceptorFactoryBean">
<property name="target">
<bean
class="org.apache.mina.transport.socket.nio.SocketAcceptor" />
</property>
<property name="bindings">
<list>//这里是个list 里面可以创建多个监听
<bean
class="org.apache.mina.integration.spring.Binding">
<property name="address" value=":8888" /> //监听端口:8888
<property name="handler" ref="SampleHandler" />// SampleHandler:定义服务器的handler
<property name="serviceConfig">
<bean
class="org.apache.mina.transport.socket.nio.SocketAcceptorConfig">
<property name="filterChainBuilder "//配置filter
ref="filterChainBuilder" /> //指向: filterChainBuilder
<property name="reuseAddress" value="true" />
</bean>
</property>
</bean>
<bean
class="org.apache.mina.integration.spring.Binding">
<property name="address" value=":9999" /> //第二个监听端口:9999
<property name="handler" ref="bossSampleHandler" /> //监听该端口的 handler
<property name="serviceConfig">
<bean
class="org.apache.mina.transport.socket.nio.SocketAcceptorConfig">
<property name="filterChainBuilder"
ref="filterChainBuilder" />
<property name="reuseAddress" value="true" />
</bean>
</property>
</bean>
</list>
</property>
</bean>
<bean id="SampleHandler" class="cn.org.handler.HandlerTwo" />
<bean id="bossSampleHandler" class="cn.org.handler.HandlerOne" />
//定义filter
<bean id="filterChainBuilder"
class="org.apache.mina.integration.spring.DefaultIoFilterChainBuilderFactoryBean">
<property name="filters">
<list>
<bean
class="org.apache.mina.filter.codec.ProtocolCodecFilter">
<constructor-arg>
<bean
class="org.apache.mina.filter.codec.textline.TextLineCodecFactory" /> //这个是编码格式filter
</constructor-arg>
</bean>
<bean class="org.apache.mina.filter.LoggingFilter" / >//日志的filter
</list>
</property>
</bean>
</beans>
sprng的简单配置文件就是这样:
然后看 handler:
SampleHandler 和 bossSampleHandler 。我写的都是一样的:
package cn.org.handler;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
public class HandlerOne extends IoHandlerAdapter {
public HandlerOne() {
// TODO Auto-generated constructor stub
}
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
// TODO Auto-generated method stub
System.out.println("收到信息");
System.out.println("message :"+message.toString());
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("小心发送");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionClosed(session);
}
@Override
public void sessionCreated(IoSession session) throws Exception {
System.out.println(session.getRemoteAddress().toString() +"---create");
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
System.out.println(session.getServiceAddress() +"IDS");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("连接打开:"+session.getLocalAddress());
}
}
现在测试:
Test.java
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
ClassPathXmlApplicationContext ct = new ClassPathXmlApplicationContext("applicationContext-mina.xml");
}
}
控制台打印出:
2010-1-16 19:00:51 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshingorg.springframework.context.support.ClassPathXmlApplicationContext@4b4333: display name [org.springframework.context.support.ClassPathXmlApplicationContext@4b4333]; startup date [Sat Jan 16 19:00:51 CST 2010]; root of context hierarchy
2010-1-16 19:00:51 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext-mina.xml]
2010-1-16 19:00:51 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@4b4333]:org.springframework.beans.factory.support.DefaultListableBeanFactory@1975b59
2010-1-16 19:00:52 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons inorg.springframework.beans.factory.support.DefaultListableBeanFactory@1975b59: defining beans [org.springframework.beans.factory.config.CustomEditorConfigurer#0,ioAcceptor,SampleHandler,bossSampleHandler,filterChainBuilder]; root of factory hierarchy
表明服务器就已经启动了:
现在你可以用telent的方式测试。也可以写个客户端的测试类:
写了个客户端的测试类:Clint.java
public class Clint {
/**
* @param args
*/
final static char end = 0x1a;
public static void main(String[] args) {
SocketConnector connector = new SocketConnector();
SocketAddress address = new InetSocketAddress("127.0.0.1", 8888);
SocketConnectorConfig config = new SocketConnectorConfig();
config.setConnectTimeout(10);// 秒
connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "GB2312" )))); //设置编码过滤器
connector.getFilterChain().addLast( "logger", new org.apache.mina.filter.LoggingFilter() );
IoSession session =null;
ConnectFuture cf = connector.connect(address, new ClintHandler(),
config);
cf.join();
if (cf.isConnected()) {
session = cf.getSession();
System.out.println("连接成功");
session.write("abc");
}else{
System.out.println("连接失败!!!");
}
}
}
mina在spring中的配置多个端口的更多相关文章
- Velocity初探小结--Velocity在spring中的配置和使用
最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...
- C3P0连接池在hibernate和spring中的配置
首先为什么要使用连接池及为什么要选择C3P0连接池,这里就不多说了,目前C3P0连接池还是比较方便.比较稳定的连接池,能与spring.hibernate等开源框架进行整合. 一.hibernate中 ...
- Spring中事务配置以及事务不起作用可能出现的问题
前言:在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度,本文介绍Spring事务配置的两种方式:基于配置文件的方式和基于注解 ...
- spring中事务配置
1 如果在方法.类.接口上使用注解的方式声明事务,需要在配置文件中进行配置,以便通知 Spring 容器对标注 @Transactional 注解的 bean 加工处理. 首先需要引入 tx 命名空间 ...
- Spring 中属性配置
1 注册自定义属性编辑器,方法一.使用BeanFactory, 则用户需要手动调用 registerCustomEditor(Class requiredType, PropertyEditor pr ...
- spring中xml配置和autowired混用
1.类的混用: 配置文件中的配置: <bean id="a" class="com.ab.cc.A" /> 类中的配置 @Autowired A a ...
- Druid 在spring中的配置
Spring配置中dataSource配置 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDat ...
- 关于spring中bean配置的几件小事
一.IOC和DI 1.IOC(Inversion of Control) 其思想是反转资源获取的方向.传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源:而应用了IOC之后 ...
- c3p0在spring中的配置
在大家的开发和学习其中应该经经常使用到数据库的连接和使用,只是连接 的方式就有非常多种方式了,例如说用最最简单的JDBC 也好,还实用比 较复杂一点的就是数据库连接池.当然还有使用DBCP的连接的,各 ...
随机推荐
- 微服务(MicroServices)
微服务Architecture(MicroServices) 微服务架构简单的定义 采用一组Service的方式来构建一个应用,服务独立部署在不同的进程(Container)中,不同Service通过 ...
- Jquery 获取地址位置
直接在浏览器地址 输入: http://pv.sohu.com/cityjson?ie=utf-8 可以查看数据格式 引入一个搜狐的js库: <script src="http://p ...
- HDU 2603 二分匹配
#include <queue>#include <vector>#include <cstdio>#include <cstring>#include ...
- docker官方镜像库 搭建 jekins
先去docker hub 镜像官网下载jenkins 镜像(https://hub.docker.com/_/jenkins/): 其实就是在docker 中执行命令:docker pull jenk ...
- R语言学习笔记(1)
第一章:R语言介绍 一 R的使用 1 R是一种区分大小写的解释型语言.R语句由函数和赋值构成.R使用<-作为赋值符号.例如: x<-rnorm(5) 创建了一个名为x的向量对象,它包含5个 ...
- character_set_connection、character_set_results、 character_set_client的作用
如题.通常的使用中,character_set_client,character_set_connection这两个变量的值是一样的,也就是说查询不需要进行编码转换.这样看来变量character_s ...
- SPOJ - BALNUM 数位dp
题意:求某一区间内的平衡数个数(指一个数,其中出现过的数,如果是偶数,那么必须出现奇数次,反之偶数次) 题解:用三进制来枚举(0到9)所有情况,0代表没有出现,1代表出现奇数次,2代表出现偶数次dp[ ...
- 用new Image().src作LOG统计的一个注意事项 .
用new Image().src作LOG统计的一个注意事项 2009-08-06 17:40 在大型网站做很多用户行为分析.产品的策划方案基本上都是通过分析用户的访问等信息而做出的,LOG信息的统计准 ...
- fatal: Could not read from remote repository.
fatal: Could not read from remote repository. Please make sure you have the correct access rightsand ...
- 编写高效的CSS选择器
高效的CSS已经不是一个新话题,也不是一个我非得重拾的话题,但是,它却是自我在SKY工作以后,真正感兴趣并始终关注的一个话题. 很多人或者忘记了,或者仅仅是没有意识到,CSS可以是高效的也可能导致低能 ...