Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序。它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API。
引入mina-core-2.0.4.jar
服务端:
public class MyServer {
public static void main(String[] args) {
IoAcceptor acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
acceptor.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
acceptor.setHandler(new IoHandlerAdapter() {
@Override
public void sessionCreated(IoSession session) throws Exception {
}
@Override
public void sessionOpened(IoSession session) throws Exception {
}
@Override
public void sessionClosed(IoSession session) throws Exception {
}
@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
}
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.println(cause.getMessage());
session.close(true);
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
System.out.println("Received message " + message);
session.write(message);
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("Sent message " + message);
}
});
try {
System.out.println("bind");
acceptor.bind(new InetSocketAddress(10000));
System.out.println("bind success");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
客户端:
public class MyClient {
public static void main(String[] args) {
IoConnector connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(10 * 1000);
connector.getFilterChain().addLast("logger", new LoggingFilter());
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
connector.setHandler(new IoHandlerAdapter() {
@Override
public void sessionCreated(IoSession session) throws Exception {
}
@Override
public void sessionOpened(IoSession session) throws Exception {
for (int i = 0; i < 10; i++) {
session.write("Hello user_" + i);
}
session.write("Bye");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
}
@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
}
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.println(cause.getMessage());
session.close(true);
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
System.out.println("Received message " + message);
if (message.toString().equalsIgnoreCase("Bye")) {
session.close(true);
}
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("Sent message :" + message);
}
});
IoSession session = null;
try {
ConnectFuture future = connector.connect(new InetSocketAddress("localhost", 10000));
future.awaitUninterruptibly();
session = future.getSession();
} catch (RuntimeIoException e) {
e.printStackTrace();
}
session.getCloseFuture().awaitUninterruptibly();
connector.dispose();
}
}