2017-01-14 1 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

Можете ли вы разместить сообщение об ошибке и/или stacktrace? –

+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

Смежные вопросы