2015-03-09 3 views
2

Вот Следующий код:Нетти WriteAndFlush метод не работает

public final class SecureChatClient { 

static final String HOST = System.getProperty("host", "127.0.0.1"); 
static final int PORT = Integer.parseInt(System.getProperty("port", "8992")); 

public static void main(String[] args) throws Exception { 
    // Configure SSL. 
    final SslContext sslCtx = SslContext.newClientContext(InsecureTrustManagerFactory.INSTANCE); 

    EventLoopGroup group = new NioEventLoopGroup(); 
    try { 
     Bootstrap b = new Bootstrap(); 
     b.group(group) 
     .channel(NioSocketChannel.class) 
     .handler(new NetworkInitializer(sslCtx)); 

     // Start the connection attempt. 
     Channel ch = b.connect(HOST, PORT).sync().channel(); 

     // Read commands from the stdin. 
     ChannelFuture lastWriteFuture = null; 
     BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
     //does not work 
     ch.writeAndFlush("hi"); 
     while (true) { 
      String line = in.readLine(); 
     if (line == null) { 
      break; 
      //(goes to if writefuture !=null) 
      } 

      // Sends the received line to the server. 
      lastWriteFuture = ch.writeAndFlush(line + "\r\n"); 

     } 

     // Wait until all messages are flushed before closing the channel. 
     if (lastWriteFuture != null) { 
      lastWriteFuture.sync(); 
     } 
    } finally { 
     // The connection is closed automatically on shutdown. 
     group.shutdownGracefully(); 
    } 
}} 

Этот код был изменен от Netty в SecureChatClient класса http://netty.io/wiki/user-guide-for-4.x.html с добавленным в линии

  ch.writeAndFlush("hi"); 

до цикла. Вывод на сервере не читает эту строку. Я не могу понять, почему это так, и для меня это почти похоже на то, что сам метод ch.writeandflush не работает за пределами цикла.

Если им не предполагается использовать ch.writeandlfush вне цикла, есть ли лучший способ отправить сообщение серверу при запуске?

Решение: все инструкции writeandflush должны заканчиваться символом «\ r \ n», чтобы очистить его. Без них они не смываются. Я не понимаю, почему это так.

Решение для кода: ch.writeAndFlush ("hi \ r \ n");

+1

Пожалуйста, удалите «Решенный» из вашего названия и вопроса. Вы можете опубликовать ответ самостоятельно и даже принять его. Это правильное указание для других с аналогичным вопросом. – usr2564301

ответ

2

Решение: все инструкции writeandflush должны заканчиваться на «\ r \ n», чтобы очистить. Без них они не смываются. Я не понимаю, почему это так.

Решение для кода: ch.writeAndFlush ("hi \ r \ n");

1

Вы должны проверить, что сообщает ChannelFuture, возвращаемое writeAndFlush (...). Бьюсь об заклад, вы получаете какое-то исключение.

+2

Например: 'lastWriteFuture = ch.writeAndFlush (строка +" \ r \ n "). Sync()'; – trustin

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