2011-11-08 61 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

看起來不錯。它對我來說工作得很好我一天被困在同樣的問題上。榮譽兄弟 –