chenhualeguan 2016-01-05
服务端:
MainServer.java
package com.nafio.mina; import java.net.InetSocketAddress; import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; 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 MainServer { /** * @param args */ public static void main(String[] args) throws Exception{ //创建一个非阻塞的Server端Socket SocketAcceptor acceptor = new NioSocketAcceptor(); //创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); //设定这个过滤器将一行一行(/r/n)的读取数据 chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory())); //设定服务器端的消息处理器:一个SamplMinaServerHandler对象, acceptor.setHandler(new MinaServerHandler()); // 服务器端绑定的端口 int bindPort=9988; //绑定端口,启动服务器 acceptor.bind(new InetSocketAddress(bindPort)); System.out.println("Mina Server is Listing on:= " + bindPort); } }
2 MinaServerHandler.java
package com.nafio.mina; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; public class MinaServerHandler extends IoHandlerAdapter{ /** * 当客户端发送消息到达时 */ public void messageReceived(IoSession session, Object message) throws Exception { //super.messageReceived(session, message); //我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String: System.out.println("ServerMessageReceived"); String s=(String)message; // Write the received data back to remote peer System.out.println("服务端->收到客户机发来的消息: "+s); //测试将消息回送给客户端 session.write(s+count); count++; } private int count = 0; public void messageSent(IoSession session, Object message) throws Exception { System.out.println("服务端->messageSent"); } public void sessionClosed(IoSession session) throws Exception { System.out.println("服务端->sessionClosed"); } @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("服务端->sessionCreated"); } /** * 当新客户端连接时调用 */ public void sessionOpened(IoSession session) throws Exception { System.out.println("服务端->Open"); } }
客户端:
1 MainClient.java
package com.nafio.mina; import java.net.InetSocketAddress; 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.transport.socket.nio.NioSocketConnector; public class MainClient { public static void main(String[] args) throws Exception{ // 创建 TCP/IP connector. NioSocketConnector connector = new NioSocketConnector(); // 创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = connector.getFilterChain(); //设定这个过滤器将一行一行(/r/n)的读取数据 chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory())); //设定服务器端的消息处理器:一个SamplMinaServerHandler对象, connector.setHandler(new MinaClientHandler()); // Set connect timeout. connector.setConnectTimeout(30); //连结到服务器: ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9988)); cf.awaitUninterruptibly(); cf.getSession().getCloseFuture().awaitUninterruptibly(); connector.dispose(); } }
2 MinaClientHandler.java
package com.nafio.mina; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; public class MinaClientHandler extends IoHandlerAdapter{ /** * 当客户端发送的消息到达时 */ @Override public void messageReceived(IoSession session, Object message) throws Exception { String s=(String)message; System.out.println("客户端->服务器发来的消息: "+s); } @Override public void messageSent(IoSession session, Object message) throws Exception { super.messageSent(session, message); System.out.println("客户端->messageSent"); } @Override public void sessionClosed(IoSession session) throws Exception { System.out.println("客户端->sessionClosed"); } @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("客户端->sessionCreated"); } @Override public void sessionOpened(IoSession session) throws Exception { System.out.println("客户端->sessionOpened"); //发送信息 try { SendMsg(session); } catch(Exception e) { e.printStackTrace(); } } //by nafio 自己写的函数 public void SendMsg(IoSession session) throws Exception{ // TransferClass tansferClass=new TransferClass(); // tansferClass.setNum(1); // tansferClass.setString("字符串"); String tansferStr="我是数据"; session.write(tansferStr); } }