1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.mina.examples.echoserver;
22
23 import java.net.InetSocketAddress;
24 import java.net.SocketAddress;
25 import java.nio.ByteBuffer;
26
27 import org.apache.mina.api.AbstractIoHandler;
28 import org.apache.mina.api.IoSession;
29 import org.apache.mina.filter.logging.LoggingFilter;
30 import org.apache.mina.transport.nio.NioTcpServer;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33
34
35
36
37
38
39
40 public class NioEchoServer {
41
42 static final private Logger LOG = LoggerFactory.getLogger(NioEchoServer.class);
43
44 public static void main(final String[] args) {
45 LOG.info("starting echo server");
46
47 final NioTcpServer acceptor = new NioTcpServer();
48
49
50 acceptor.setFilters(new LoggingFilter("LoggingFilter1"));
51
52 acceptor.setIoHandler(new AbstractIoHandler() {
53 @Override
54 public void sessionOpened(final IoSession session) {
55 LOG.info("session opened {}", session);
56
57 final String welcomeStr = "welcome\n";
58 final ByteBuffer bf = ByteBuffer.allocate(welcomeStr.length());
59 bf.put(welcomeStr.getBytes());
60 bf.flip();
61 session.write(bf);
62 }
63
64 @Override
65 public void messageReceived(IoSession session, Object message) {
66 if (message instanceof ByteBuffer) {
67 LOG.info("echoing");
68 session.write(message);
69 }
70 }
71 });
72 try {
73 final SocketAddress address = new InetSocketAddress(9999);
74 acceptor.bind(address);
75 LOG.debug("Running the server for 25 sec");
76 Thread.sleep(25000);
77 LOG.debug("Unbinding the TCP port");
78 acceptor.unbind();
79 } catch (final InterruptedException e) {
80 LOG.error("Interrupted exception", e);
81 }
82 }
83 }