Server:
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{ //Create a non-blocking server-side Socket SocketAcceptor acceptor = new NioSocketAcceptor(); //Create a filter to receive data DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); //Set this filter to read data line by line (/r/n) chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory())); //Set the message handler on the server side: a SamplMinaServerHandler object, acceptor.setHandler(new MinaServerHandler()); // server-side binding port int bindPort=9988; //Bind the port, start the server 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{ /** * When the client sends a message when it arrives */ public void messageReceived(IoSession session, Object message) throws Exception { //super.messageReceived(session, message); //We have set the rule that the server parses the message to read line by line, here it can be converted to String: System.out.println("ServerMessageReceived"); String s=(String)message; // Write the received data back to remote peer System.out.println("Server->Received message from client: "+s); //Test sending the message back to the client session.write(s+count); count++; } private int count = 0; public void messageSent(IoSession session, Object message) throws Exception { System.out.println("Server->messageSent"); } public void sessionClosed(IoSession session) throws Exception { System.out.println("Server->sessionClosed"); } @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("服务端->sessionCreated"); } /** * Called when a new client connects */ public void sessionOpened(IoSession session) throws Exception { System.out.println("Server->Open"); } }
Client:
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{ // Create a TCP/IP connector. NioSocketConnector connector = new NioSocketConnector(); // create a filter to receive data DefaultIoFilterChainBuilder chain = connector.getFilterChain(); //Set this filter to read data line by line (/r/n) chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory())); //Set the message handler on the server side: a SamplMinaServerHandler object, connector.setHandler(new MinaClientHandler()); // Set connect timeout. connector.setConnectTimeout(30); //Connect to the server: 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{ /** * When the message sent by the client arrives */ @Override public void messageReceived(IoSession session, Object message) throws Exception { String s=(String)message; System.out.println("Client->Message from server: "+s); } @Override public void messageSent(IoSession session, Object message) throws Exception { super.messageSent(session, message); System.out.println("Client->messageSent"); } @Override public void sessionClosed(IoSession session) throws Exception { System.out.println("Client->sessionClosed"); } @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("客户端->sessionCreated"); } @Override public void sessionOpened(IoSession session) throws Exception { System.out.println("Client->sessionOpened"); //send Message try { SendMsg(session); } catch(Exception e) { e.printStackTrace (); } } //by nafio's own function public void SendMsg(IoSession session) throws Exception{ // TransferClass tansferClass=new TransferClass(); // tansferClass.setNum (1); // tansferClass.setString("String"); String tansferStr="I am data"; session.write(tansferStr); } }