2015-09-08 1 views
-1

Когда я перехожу к локальному хосту и порту через telnet, я могу подключиться, но как только я даю один вход, он записывает обратно. Я хочу подождать nextline, когда я нажимаю enter, а затем даю мне вывод всей строки.Дайте следующий вход в telnet

public class NewIOServer { 

public static void main(String[] args) throws IOException { 
    ServerSocketChannel ssc = ServerSocketChannel.open(); 
    ssc.bind(new InetSocketAddress("localhost", 9000)); 
    ExecutorService pool = Executors.newFixedThreadPool(100); 
    while (true) { 
     SocketChannel sc = ssc.accept(); 
     System.out.println("Connected from: " + sc); 
     try { 
      ByteBuffer buffer = ByteBuffer.allocateDirect(1024); 
      while (sc.read(buffer) != -1) { 
       buffer.flip(); 
       for (int i = 0; i < buffer.limit(); i++) 
        buffer.put(i, (byte) buffer.get(i)); 
       sc.write(buffer); 
       buffer.clear(); 
      } 
     } catch (IOException ex) { 
      System.out.println("Problems with the connections into the server - " + ex.getMessage()); 
     } 

    } 
} 

} 
+0

Он должен работать нормально. Какую операционную систему вы используете? Какой клиент telnet? Похоже, что это проблема, связанная с клиентом (я думаю, клиент не должен очищаться, пока не будет подтвержден вход). – MirMasej

+0

Я использую Windows 7 64bit, я установил клиент telnet через «Свойства Windows». – T4l0n

+0

Возможно, вы можете попробовать другой клиент telnet? Например, [шпатлевка] (http://www.putty.org/). – MirMasej

ответ

0

Я ничего не вижу в вашем коде, который на самом деле ждет завершения строки, прежде чем она будет отозвана обратно. Клиенты Telnet, традиционно использовавшиеся для интерактивных сеансов оболочки, обычно отправляют пакеты как можно скорее, чтобы уменьшить латентность после нажатия клавиши, поэтому, конечно, ваш код будет получать каждое нажатие клавиши почти сразу и записать его обратно на канал.