Apache MINA 2 是一个开发高性能和高可伸缩性网络应用程序的网络应用框架。它提供了一个抽象的事件驱动的异步 API,可以使用 TCP/IP、UDP/IP、串口和虚拟机内部的管道等传输方式。Apache MINA 2 可以作为开发网络应用程序的一个良好基础。
本文介绍了如何使用Apache Mina开发UDP服务端程序。
public class UdpServer { private static final long serialVersionUID = 1L; public static final int PORT = 8; public UdpServer() throws IOException { NioDatagramAcceptor acceptor = new NioDatagramAcceptor(); acceptor.setHandler(new UdpServerHandler(this)); Executor threadPool = Executors.newCachedThreadPool(); DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); chain.addLast("logger", new LoggingFilter()); chain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); chain.addLast("threadPool", new ExecutorFilter(threadPool)); DatagramSessionConfig dcfg = acceptor.getSessionConfig(); dcfg.setReadBufferSize(4096);// 设置接收最大字节默认2048 dcfg.setMaxReadBufferSize(65536); dcfg.setReceiveBufferSize(1024);// 设置输入缓冲区的大小 dcfg.setSendBufferSize(1024);// 设置输出缓冲区的大小 dcfg.setReuseAddress(true);// 设置每一个非主监听连接的端口可以重用 acceptor.bind(new InetSocketAddress(PORT)); System.out.println("UDPServer listening on port " + PORT); } public static void main(String[] args) throws IOException { new UdpServer(); } }
public class UdpServerHandler extends IoHandlerAdapter { private UdpServer server; public UdpServerHandler(UdpServer server) { this.server = server; } @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { cause.printStackTrace(); session.close(true); } @Override public void messageReceived(IoSession session, Object message) throws Exception { String expression = message.toString(); System.out.println("[" + expression + "]"); } @Override public void sessionClosed(IoSession session) throws Exception { System.out.println("Session closed..."); } @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("Session created..."); SocketAddress remoteAddress = session.getRemoteAddress(); System.out.println(remoteAddress); } @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { System.out.println("Session idle..."); } @Override public void sessionOpened(IoSession session) throws Exception { System.out.println("Session Opened..."); SocketAddress remoteAddress = session.getRemoteAddress(); System.out.println(remoteAddress); } }