读书人

Mina Server/Client 例证

发布时间: 2012-11-10 10:48:51 作者: rapoo

Mina Server/Client 例子

Mina 需要mina.jar ,log4j.jar,slf4j.jar

?

Server端

package Server;import java.net.InetSocketAddress;import org.apache.mina.common.DefaultIoFilterChainBuilder;import org.apache.mina.common.IdleStatus;import org.apache.mina.common.IoHandlerAdapter;import org.apache.mina.common.IoSession;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;import org.apache.mina.transport.socket.SocketAcceptor;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class MinaServer {public void init() throws Exception{SocketAcceptor acceptor = new NioSocketAcceptor(Runtime.getRuntime().availableProcessors() + 1);//设置解析器DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();chain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));acceptor.setHandler(new BexnHandler());acceptor.bind(new InetSocketAddress(8080));}public MinaServer() throws Exception {init();}public static void main(String[] args) throws Exception {new MinaServer();System.out.println("Server start");}}class BexnHandler extends IoHandlerAdapter{@Overridepublic void messageReceived(IoSession session, Object message) throws Exception {System.out.println("messageReceived " + message);super.messageReceived(session, message);session.write("messageReceived "+message);session.closeOnFlush();}@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {if (session.isConnected()) {session.close();}}@Overridepublic void messageSent(IoSession session, Object message) throws Exception {session.close();}@Overridepublic void sessionClosed(IoSession session) throws Exception {super.sessionClosed(session); System.out.println("sessionClosed");}@Overridepublic void sessionCreated(IoSession session) throws Exception {session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30000);}@Overridepublic void sessionIdle(IoSession session, IdleStatus status)throws Exception {session.close();}@Overridepublic void sessionOpened(IoSession session) throws Exception {super.sessionOpened(session);}}

?

Client端

package Client;import java.io.ObjectInputStream.GetField;import java.net.ConnectException;import java.net.InetSocketAddress;import org.apache.mina.common.ConnectFuture;import org.apache.mina.common.IdleStatus;import org.apache.mina.common.IoHandlerAdapter;import org.apache.mina.common.IoSession;import org.apache.mina.common.RuntimeIoException;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;import org.apache.mina.transport.socket.SocketConnector;import org.apache.mina.transport.socket.nio.NioSocketConnector;public class MinaClient {public SocketConnector socketConnector;/** * 缺省连接超时时间 */public static final int DEFAULT_CONNECT_TIMEOUT = 5;public static final String HOST = "localhost";public static final int PORT = 8080;public MinaClient() {init();}public void init() {socketConnector = new NioSocketConnector();// 长连接// socketConnector.getSessionConfig().setKeepAlive(true);socketConnector.setConnectTimeout(DEFAULT_CONNECT_TIMEOUT);socketConnector.setReaderIdleTime(DEFAULT_CONNECT_TIMEOUT);socketConnector.setWriterIdleTime(DEFAULT_CONNECT_TIMEOUT);socketConnector.setBothIdleTime(DEFAULT_CONNECT_TIMEOUT);socketConnector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));ClientIoHandler ioHandler = new ClientIoHandler();socketConnector.setHandler(ioHandler);}public void sendMessage(final String msg) {InetSocketAddress addr = new InetSocketAddress(HOST, PORT);ConnectFuture cf = socketConnector.connect(addr);try {cf.awaitUninterruptibly();cf.getSession().write(msg);System.out.println("send message " + msg);} catch (RuntimeIoException e) {if (e.getCause() instanceof ConnectException) {try {if (cf.isConnected()) {cf.getSession().close();}} catch (RuntimeIoException e1) {}}}}public static void main(String[] args) throws InterruptedException {MinaClient clent = new MinaClient();for (int i = 0; i < 1; i++) {System.err.println(i);clent.sendMessage("Hello World " + i);}clent.getSocketConnector().dispose();//System.exit(0);}public SocketConnector getSocketConnector() {return socketConnector;}public void setSocketConnector(SocketConnector socketConnector) {this.socketConnector = socketConnector;}}class ClientIoHandler extends IoHandlerAdapter {private void releaseSession(IoSession session) throws Exception {System.out.println("releaseSession");if (session.isConnected()) {session.closeOnFlush();}}@Overridepublic void sessionOpened(IoSession session) throws Exception {System.out.println("sessionOpened");}@Overridepublic void sessionClosed(IoSession session) throws Exception {System.out.println("sessionClosed");}@Overridepublic void sessionIdle(IoSession session, IdleStatus status) throws Exception {System.out.println("sessionIdle");try {releaseSession(session);} catch (RuntimeIoException e) {}}@Overridepublic void messageReceived(IoSession session, Object message) throws Exception {System.out.println("Receive Server message " + message);super.messageReceived(session, message);releaseSession(session);}@Overridepublic void exceptionCaught(IoSession session, Throwable cause) throws Exception {System.out.println("exceptionCaught");cause.printStackTrace();releaseSession(session);}@Overridepublic void messageSent(IoSession session, Object message) throws Exception {System.out.println("messageSent");super.messageSent(session, message);}}
?

读书人网 >编程

热点推荐