2011-11-08 25 views
2

我们在当前项目中使用的Apache MINA用于TCP/IP协议,其中服务器和客户端通过TCP/IP进行通信。所以我们已经有一些MINA代码。有关Apache MINA HTTP协议支持的信息

现在我们还想支持http协议,并重新使用任何可能的东西。

我需要一些使用URL(/ servlet)连接MINA-HTTP的客户端/服务器代码示例。

我发现像如下─ http://mina.apache.org/report/trunk/xref/org/apache/mina/example/httpserver/codec/package-frame.html

但寻找适合服务器和客户端的示例代码的链接。 这将是巨大的,如果有人能帮助我在这

感谢,

回答

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); 
+0

能否请您在此..Am一个newbee –

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(); 
    } 
+1

解释了服务器和客户端部分解释你的答案一点。只有代码答案不值得赞赏。 –

+0

在mina-http中,每当它通过request,body,endofeontent返回时,我们都有HttpServerDecoder.class(http://mina.apache.org/mina-project/xref/org/apache/mina/http/HttpServerDecoder.html)。我们通过HttpServerDecoder.class中对应的对象接收到公共无效的messageReceived(IoSession会话,Object消息) – afthab

+0

看起来不错。它对我来说工作得很好我一天被困在同样的问题上。荣誉兄弟 –