2011-11-08 9 views
2

私たちは、現在のプロジェクトで、サーバーとクライアントがTCP/IPを介して通信するTCP/IPプロトコル用にApache MINAを使用しています。ですから、MINAのコードはすでに用意されています。Apache MINA HTTPプロトコルのサポートに関する情報

これで、httpプロトコルもサポートし、可能な限り再利用したいと考えています。

MINA-HTTPにURL(/ servlet)を使用して接続するためのクライアント/サーバーコードの例が必要です。

私はbelow- 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

in mina-httpリクエスト、ボディ、エンド特典で返されるたびに、HttpServerDecoder.class(http://mina.apache.org/mina-project/xref/org/apache/mina/http/HttpServerDecoder.html)があります。 。私たちは、public void messageReceived(IoSessionセッション、オブジェクトメッセージ)をHttpServerDecoder.classに対応するオブジェクトで受け取っています。 – afthab

+0

いいですね。私にとってはうまく働いています。私は同じ日に同じ問題に悩まされていました。クードスブロー –

関連する問題