首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

MINA学习(1)1.1.7的SERVER和CLIENT示例

2012-12-27 
MINA学习(一)1.1.7的SERVER和CLIENT示例1.SERVER端程序和配置 程序 MinaServer.java: package com.sillyca

MINA学习(一)1.1.7的SERVER和CLIENT示例

1.SERVER端程序和配置
程序 MinaServer.java:

package com.sillycat.manager.impl;


import java.net.InetSocketAddress;

import org.apache.mina.common.IoAcceptor;
import org.apache.mina.filter.LoggingFilter;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.nio.SocketAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;

public class MinaServer {
private static final int SERVER_PORT = 8080;???
???
??? public static void main( String[] args ) throws Throwable???
??? {???
??????? IoAcceptor acceptor = new SocketAcceptor();???
???????????
??????? // Prepare the service configuration.???
??????? SocketAcceptorConfig cfg = new SocketAcceptorConfig();???
??????? cfg.setReuseAddress( true );???
??
??????? cfg.getFilterChain().addLast(???
??????????????????? "codec",???
??????????????????? new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );???
??????? cfg.getFilterChain().addLast( "logger", new LoggingFilter() );???
??
??????? acceptor.bind(???
??????????????? new InetSocketAddress( SERVER_PORT ),???
??????????????? new MinaServerSessionHandler( ), cfg );???
??????? System.out.println( "The server Listening on port " + SERVER_PORT );???
??? }???
}

SERVER端的处理类MinaServerSessionHandler.java:

package com.sillycat.manager.impl;

import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
import org.apache.mina.util.SessionLog;
import com.sillycat.model.Message;

public class MinaServerSessionHandler extends IoHandlerAdapter {
public void sessionOpened(IoSession session) {
?? // set idle time to 60 seconds
?? session.setIdleTime(IdleStatus.BOTH_IDLE, 60);
?? session.setAttribute("times", new Integer(0));
}

public void messageReceived(IoSession session, Object message) {
?? System.out.println("in messageReceived");
?? int times = ((Integer) (session.getAttribute("times"))).intValue();
?? System.out.println("tiems = " + times);
?? // communicate 30 times,then close the session.
?? if (times < 1) {
??? times++;
??? session.setAttribute("times", new Integer(times));
??? Message msg;
??? msg = (Message) message;
??? msg.setMsgBody("in server side: " + msg.getMsgBody());
??? System.out.println("begin send msg: " + msg.getMsgBody());
??? session.write(msg);
?? } else {
??? session.close();
?? }
}
public void sessionIdle(IoSession session, IdleStatus status) {
?? SessionLog.info(session, "Disconnecting the idle.");
?? // disconnect an idle client
?? session.close();
}
public void exceptionCaught(IoSession session, Throwable cause) {
?? // close the connection on exceptional situation
?? session.close();
}
}

我使用的是MAVEN来管理JAR包,pom.xml文件片段如下:
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.4.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.4.3</version>
</dependency>

2.CLIENT的程序和配置
CLIENT类MinaClient.java:
package com.sillycat.manager.impl;

import java.net.InetSocketAddress;

import org.apache.mina.common.IoSession;
import org.apache.mina.filter.LoggingFilter;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.nio.SocketConnector;
import org.apache.mina.transport.socket.nio.SocketConnectorConfig;

import com.sillycat.model.Message;

public class MinaClient {
private static final String HOSTNAME = "localhost";???
??? private static final int PORT = 8080;???
??? private static final int CONNECT_TIMEOUT = 30; // seconds???
??
??
??? public static void main( String[] args ) throws Throwable???
??? {???
??????? SocketConnector connector = new SocketConnector();???????????
??????? // Configure the service.???
??????? SocketConnectorConfig cfg = new SocketConnectorConfig();???
??????? cfg.setConnectTimeout( CONNECT_TIMEOUT );???
????????? cfg.getFilterChain().addLast(???
??????????????????? "codec",???
??????????????????? new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );???
??
??????? cfg.getFilterChain().addLast( "logger", new LoggingFilter() );???
???????????
??????? IoSession session;???
??????? Message msg = new Message(0,1,"hello");???
??????? connector.connect(new InetSocketAddress( HOSTNAME, PORT ),???
??????????????????????? new MinaClientSessionHandler(msg), cfg );???
??
??? }??

}

CLIENT的实现类MinaClientSessionHandler.java:

package com.sillycat.manager.impl;

import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
import org.apache.mina.util.SessionLog;

import com.sillycat.model.Message;

public class MinaClientSessionHandler extends IoHandlerAdapter {
private Object msg;

public MinaClientSessionHandler(Object msg) {
?? this.msg = msg;
}

public void sessionOpened(IoSession session) {
?? session.write(this.msg);
}

public void messageReceived(IoSession session, Object message) {
?? System.out.println("in messageReceived!");
?? Message rm = (Message) message;
?? SessionLog.debug(session, rm.getMsgBody());
?? System.out.println("message is: " + rm.getMsgBody());
?? session.write(rm);
}

public void exceptionCaught(IoSession session, Throwable cause) {
?? session.close();
}

}

热点排行