2017-01-14 16 views
1

私はnettyとの接続を開いてサーバーにデータを送信する方法を理解しようとしています。Nettyとの接続を開き、直ちに接続されたホストにデータを送信する方法は?

これは私が働いて取得しようとしてる私のコードです:

public static void main(String[] args) { 
    EventLoopGroup workerGroup = new NioEventLoopGroup(); 

    try { 
     Bootstrap b = new Bootstrap(); // (1) 
     b.group(workerGroup); // (2) 
     b.channel(NioSocketChannel.class); // (3) 
     b.option(ChannelOption.SO_KEEPALIVE, true); // (4) 
     b.handler(new ChannelInitializer<SocketChannel>() { 
      @Override 
      public void initChannel(SocketChannel ch) throws Exception { 
       ch.pipeline().addLast(new InboundHandler()); 
       ch.pipeline().addLast(new OutboundHandler()); 
      } 
     }); 


     Channel channel = b.connect("localhost", 22000).channel(); 
     channel.write(true); //Lets send a boolean to test. 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     workerGroup.shutdownGracefully(); 
    } 
} 

私は私のinboundhandlerが登録されている場合にもデータを送信しようとしました。私が間違っていることを確認していない。

+0

エラーメッセージまたはスタックトレースを投稿できますか? –

+0

エラーはありません。データは送信されません。 – UNDERGROUNDBTCHITMAN

答えて

2

は、あなたのデータ交換をデバッグするためにあなたのパイプラインへのロギングハンドラを追加します。

@Override 
public void initChannel(SocketChannel ch) throws Exception { 
    ch.pipeline().addFirst(new LoggingHandler(LogLevel.INFO)); 
    ch.pipeline().addLast(new InboundHandler()); 
    ch.pipeline().addLast(new OutboundHandler()); 
} 

あなたはこのような接続完了イベントに反応するようにリスナーを追加する必要があります。データが受信されたことを確認

ChannelFuture cf = b.connect("localhost", 22000); 

cf.addListener(new ChannelFutureListener() { 
    @Override 
    public void operationComplete(ChannelFuture future) throws Exception { 
     if(future.isSuccess()) { 
      //Here wrap your data into ByteBuf 
      future.channel().writeAndFlush(Unpooled.buffer().writeByte(5)); 
     } else { 
      //Connection failed, add proper error handling ! 
      future.cause().printStackTrace(System.err); 
     } 
    } 
}); 

strace -e recvfrom nc -k -l 22000

09:16:18.222252 recvfrom(5, "\x05", 8192, 0, NULL, NULL) = 1 
09:16:18.223916 recvfrom(5, "", 8192, 0, NULL, NULL) = 0 
+0

私が何か間違っていない限り、これは動作しません。 コード: http://pastebin.com/DxutrBH5(データも送信されていません) – UNDERGROUNDBTCHITMAN

+0

「動作していません」とはどういう意味ですか? – rkosegi

+0

コードで更新しました。データは送信されません。 – UNDERGROUNDBTCHITMAN

関連する問題