一、配置文件内容:
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.net.SocketAddress">
<bean class="org.apache.mina.integration.beans.InetSocketAddressEditor" />
</entry>
</map>
</property>
</bean>
<bean id="executorFilter" class="org.apache.mina.filter.executor.ExecutorFilter" />
<bean id="mdcInjectionFilter" class="org.apache.mina.filter.logging.MdcInjectionFilter">
<constructor-arg value="remoteAddress" />
</bean>
<!-- mina codec filter-->
<bean id="codecFilter" class="org.apache.mina.filter.codec.ProtocolCodecFilter">
<constructor-arg>
<!-- 默认自带的 -->
<!-- <bean class="org.apache.mina.filter.codec.textline.TextLineCodecFactory" /> -->
<!-- 自定义的 字符编码类 -->
<bean class="com.isoftstone.hylm.outeradapter.communication.mina.HCoderFactory"></bean>
</constructor-arg>
</bean>
<!-- mina log filter -->
<bean id="loggingFilter" class="org.apache.mina.filter.logging.LoggingFilter" />
<!-- mina hanlder -->
<bean id="serverHanlder" class="com.isoftstone.hylm.outeradapter.communication.mina.ServerHanlder" />
<!-- mina chain -->
<bean id="filterChainBuilder"
class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder">
<property name="filters">
<map>
<entry key="executor" value-ref="executorFilter" />
<entry key="mdcInjectionFilter" value-ref="mdcInjectionFilter" />
<entry key="codecFilter" value-ref="codecFilter" />
<entry key="loggingFilter" value-ref="loggingFilter" />
</map>
</property>
</bean>
<!-- mina service -->
<bean id="ioAcceptor" class="org.apache.mina.transport.socket.nio.NioSocketAcceptor"
init-method="bind" destroy-method="unbind">
<property name="defaultLocalAddress" value=":1235" />
<property name="handler" ref="serverHanlder" />
<property name="filterChainBuilder" ref="filterChainBuilder" />
<property name="reuseAddress" value="true" />
</bean>
</beans>
二、代码内容
1、HCoderFactory 编码解码器类
package com.*.communication.mina;
import java.nio.charset.Charset;
import java.util.Properties;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFactory;
import org.apache.mina.filter.codec.ProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolEncoder;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineDecoder;
import org.apache.mina.filter.codec.textline.TextLineEncoder;
/**
* 编码解码器
*/
public class HCoderFactory implements ProtocolCodecFactory
{
private static final Charset charset = Charset.forName("UTF-8");
private TextLineEncoder encoder;
private TextLineDecoder decoder;
@Override
public ProtocolDecoder getDecoder(IoSession arg0) throws Exception
{
decoder = new TextLineDecoder(charset, LineDelimiter.AUTO);
return decoder;
}
@Override
public ProtocolEncoder getEncoder(IoSession arg0) throws Exception
{
String osType = getOsType();
if ("Windows".equals(osType))
{
encoder = new TextLineEncoder(charset, LineDelimiter.WINDOWS);
}
else
{
encoder = new TextLineEncoder(charset, LineDelimiter.UNIX);
}
return encoder;
}
/**
*
* @Title: getOsType
* @Description: 获取操作系统类型
*
* @return
* @return: String
* @Author:
* @date:
*/
private String getOsType()
{
String osType = "Linux";
Properties props = System.getProperties(); // 系统属性
String os = props.getProperty("os.name");
if (os != null && os.startsWith("Windows"))
{
osType = "Windows";
}
return osType;
}
}
2、ServerHanlder服务端业务处理类
package com.*.communication.mina;
import java.net.InetSocketAddress;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* mina 服务端业务处理类
*/
public class ServerHanlder extends IoHandlerAdapter
{
private Logger logger = LoggerFactory.getLogger(ServerHanlder.class);
@Override
public void sessionOpened(IoSession session) throws Exception
{
InetSocketAddress remoteAddress = (InetSocketAddress)session.getRemoteAddress();
String remoteHostAddress = remoteAddress.getAddress().getHostAddress();
logger.info("====================Session open: is [" + remoteHostAddress + "] =================");
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception
{
String str = message.toString();
logger.info("Mina The message received is [" + str + "]");
if(str.endsWith("quit"))
{
session.close(true);
return;
}
}
}