2

We have Apache MINA used in current project for TCP/IP protocol where server and client communicates over TCP/IP. So we have some code for MINA already in place.

Now we want to support http protocol as well, and re-use whatever possible.

I need some example of client/server code for connecting using URL (/servlet) for MINA-HTTP.

I found links like below- http://mina.apache.org/report/trunk/xref/org/apache/mina/example/httpserver/codec/package-frame.html

But looking for sample code for server and client side. It would be great if someone can help me on this

Thanks,

skaffman
  • 398,947
  • 96
  • 818
  • 769

2 Answers2

1
    final Object lock = new Object();
    IoAcceptor acceptor = new NioSocketAcceptor();
    ((NioSocketAcceptor) acceptor).setReuseAddress(true);
    acceptor.getFilterChain().addLast("httpServer", new HttpServerCodec());
    acceptor.setHandler(new IoHandlerAdapter() {
        @Override
        public void messageReceived(IoSession session, Object message) throws Exception {
            // System.out.println("message "+message.getClass()+" "+message);
            if (message instanceof HttpRequest) {
                byte[] bytes = "Hello World!".getBytes();
                Map<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Length", Integer.toString(bytes.length));
                DefaultHttpResponse resp = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SUCCESS_OK,
                        headers);
                session.write(resp);
                session.write(IoBuffer.wrap(bytes));
                session.write(new HttpEndOfContent());
                if (((HttpRequest) message).getRequestPath().equals("/close")) {
                    synchronized (lock) {
                        lock.notify();
                    }
                }
            }
        }
    });
    acceptor.bind(new InetSocketAddress(21212));
    synchronized (lock) {
        lock.wait();
    }
    acceptor.unbind();
    acceptor.dispose(true);
kac-
  • 29
  • 4
1
   NioSocketAcceptor acceptor = new NioSocketAcceptor();
   acceptor.getFilterChain().addLast( "codec", new  HttpServerCodec());
   acceptor.setHandler(new IoHandlerAdapter() { 
    public void messageReceived(IoSession session, Object message)throws Exception {
         if (message instanceof HttpRequestImpl) {
            HttpRequestImpl request1 = (HttpRequestImpl) message;

        }
        if (message instanceof IoBuffer) {
            SocketAddress addr = session.getRemoteAddress()
            IoBuffer simbuf = (IoBuffer) message;
            byte[] buff = simbuf.array();
            String decoded = new String(buff, "UTF-8");
            System.out.println(decoded);

        }
        if (message instanceof HttpEndOfContent) {
            byte[] bytes = "OK".getBytes();
            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Length", Integer.toString(bytes.length));
            DefaultHttpResponse resp = new DefaultHttpResponse(
                    HttpVersion.HTTP_1_1, HttpStatus.SUCCESS_OK, headers);
            session.write(resp);
            session.write(IoBuffer.wrap(bytes));
            session.write(new HttpEndOfContent());

        }

    } 
});
 try {
        acceptor.bind( new InetSocketAddress(1234) );
    } catch (IOException e) {
        e.printStackTrace();
    }   
afthab
  • 89
  • 1
  • 2
  • 1
    Explain your answer a little. Code only answers are not appreciated. – Sulthan Allaudeen Jul 10 '14 at 05:40
  • in mina-http we have HttpServerDecoder.class (http://mina.apache.org/mina-project/xref/org/apache/mina/http/HttpServerDecoder.html) each time it return by request,body,endofeontent.. we receive public void messageReceived(IoSession session, Object message) by object of corresponding in the HttpServerDecoder.class – afthab Jul 10 '14 at 09:23
  • Looks good ..Its working well for me i was stuck on the same problem for a day day.Saved my days job..Kudos bro – Sarath Sadasivan Pillai Jul 10 '14 at 16:42