2016-11-18 4 views
0

im в настоящее время пытается узнать netty и ничего не работает ...): Как-то сервер не получает никаких сообщений от клиента, и я не знаю почему. Пожалуйста, имейте в виду, что я никогда не создаю рабочее приложение в netty, поэтому у меня нет абсолютно никакого опыта. Я был бы рад, если бы кто-нибудь мог мне помочь. Я отправляю много кода и сожалею об этом, но я понятия не имею, как уменьшить этот вопрос.Сервер не получает сообщение

Итак, это мой код:

new Server().run(); 
    Client client = new Client(); 
    client.run(); 

    while(true){ 
     System.out.println("sending message to server..."); 
     client.sendMessage(new PacketPing(System.currentTimeMillis())); 
     Thread.sleep(1000); 
    } 

Это мой клиент:

private Channel channel; 
@Override public void run() { 
    ChannelFuture future = new Bootstrap(). 
      group(new NioEventLoopGroup()). 
      channel(NioSocketChannel.class). 
      handler(new ChannelInitializer<SocketChannel>() { 
       @Override protected void initChannel(SocketChannel ch) throws Exception { 
        ch.pipeline().addLast(
          new ObjectEncoder(), 
          new ObjectDecoder(ClassResolvers.cacheDisabled(null)), 
          new ChannelInboundHandlerAdapter() { 
           @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { 
            System.out.println("client received message!"); 
           } 
          }); 
       } 
      }).connect("localhost", 40401); 
    try { 
     future.get(); 
    } catch (InterruptedException | ExecutionException e) { 
     e.printStackTrace(); 
    } 
    this.channel = future.channel(); 
} 
public void sendMessage(Object msg) { 
    channel.writeAndFlush(msg); 
} 

И это мой сервер:

@Override public void run() { 
    new ServerBootstrap(). 
      group(new NioEventLoopGroup(1), new NioEventLoopGroup()). 
      channel(NioServerSocketChannel.class). 
      handler(new LoggingHandler(LogLevel.INFO)). 
      childHandler(new ChannelInitializer<SocketChannel>() { 
       @Override protected void initChannel(SocketChannel ch) throws Exception { 
        ch.pipeline().addLast(
          new ObjectEncoder(), 
          new ObjectDecoder(ClassResolvers.cacheDisabled(null)), 
          new ChannelInboundHandlerAdapter() { 
           @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { 
            System.out.println("server received a message!"); 
           } 
          }); 
       } 
      }).bind(40401); 
} 

Я думаю, что им не хватает какой-то фундаментальное понимание и я не знаю, с чего начать отладку. Код очень прост, так что должно быть легко для всех, знакомы с Нетти, чтобы ответить на это (! Спасибо @everybody

консоли:.

Nov 18, 2016 7:47:58 PM io.netty.handler.logging.LoggingHandler channelRegistered 
INFORMATION: [id: 0x52b5b879] REGISTERED 
Nov 18, 2016 7:47:58 PM io.netty.handler.logging.LoggingHandler bind 
INFORMATION: [id: 0x52b5b879] BIND: 0.0.0.0/0.0.0.0:40401 
Nov 18, 2016 7:47:58 PM io.netty.handler.logging.LoggingHandler channelActive 
INFORMATION: [id: 0x52b5b879, L:/0:0:0:0:0:0:0:0:40401] ACTIVE 
Nov 18, 2016 7:47:58 PM io.netty.handler.logging.LoggingHandler channelRead 
INFORMATION: [id: 0x52b5b879, L:/0:0:0:0:0:0:0:0:40401] RECEIVED: [id: 0xdda43b4c, L:/127.0.0.1:40401 - R:/127.0.0.1:56421] 
sending message to server... 
sending message to server... 
sending message to server... 
sending message to server... 
sending message to server... 
sending message to server... 
+0

Имеет ли канал будущее, которое вы получаете от 'writeAndFlush', указывает на успех? – Ferrybig

+0

Нет, он возвращает false ... но почему? – NyxMC

+0

Проверьте причину, вызовите' .cause(). printStackTrace() '(на канальное будущее) на нем для печати на консоль – Ferrybig

ответ

0

Исправлена ​​ошибка, благодаря Ferrybig Мой пакет был просто не является сериализуемым.