2011-08-01 16 views
0

我一直在試圖找出這一段現在:如何用Java Apache commons發送telnet擦除線(EL)?

我已經設置了一個Apache公共服務telnet客戶端,可以發送命令到服務器和讀取響應。我的程序大致如下:

TelnetClient telnetClient = new TelnetClient(); 

    // Add option handlers 
    TerminalTypeOptionHandler ttopt = new TerminalTypeOptionHandler(
      "VT100", false, false, true, false); 
    EchoOptionHandler echoopt = new EchoOptionHandler(true, false, true, 
      false); 
    SuppressGAOptionHandler gaopt = new SuppressGAOptionHandler(true, true, 
      true, true); 
    try { 
     telnetClient.addOptionHandler(ttopt); 
     telnetClient.addOptionHandler(echoopt); 
     telnetClient.addOptionHandler(gaopt); 
    } catch (InvalidTelnetOptionException e) { 
     System.err.println("Error registering option handlers: " 
       + e.getMessage()); 
     throw new IOException(); 
    } 

    // Connect to server 
    telnetClient.connect(SERVER_ADDRESS, SERVER_PORT); 

    byte[] data = new byte[] { 'f', 'o', 'o', '\r', '\n' }; 

    // Send "foo" 
    telnetClient.getOutputStream().write(data); 
    telnetClient.getOutputStream().flush(); 

    // ... 

    // Erase previous input 
    data = new byte[] { (byte) TelnetCommand.IAC, (byte) TelnetCommand.EL, 
      '\r', '\n' }; 

    telnetClient.getOutputStream().write(data); 
    telnetClient.getOutputStream().flush(); 

我想要做的就是發送一個telnet命令EL抹去先前發送的字符,整條生產線(「富」)。 Telnet命令總是以前面的IAC字符發送,這也是我發送的內容。

我有一個監聽器的工作實現,它讀取服務器回聲並將其打印出來。

問題是,當我發送IAC-EL時,字符不被解釋爲命令。反過來,IAC-EL字符作爲「foo ø」附加回前一個輸入。

這是行模式一次設置爲一個字符的問題嗎?

另外服務器端通過telnet運行VT100。也許有一些方法可以發送VT100轉義序列來刪除該行,例如, 「←[1K」。無論如何,我發送VT100序列的過程並不成功。

回答

0

您是否嗅探過實際發送的內容?我希望Apache代碼能夠逃離IAC,所以你真的發送IAC-IAC-EL。

您應該調用TelnetClient.sendCommand(EL)。

+0

我對發送的數據包進行了嗅探,並且你是對的,它實際上逃脫了IAC字符,因此發送了IAC-IAC-EL。但是,如果我嘗試只發送一個EL,嗅探器顯示它只發送EL本身(沒有IAC)。我如何設法只發送一個IAC,然後是EL字符? – Snps

+0

@ snipes83不是我剛纔回答的嗎? – EJP

+0

我發送命令的方法會很棒,但我找不到一個。 TelnetClient類只有「sendAYT()」用於發送「你在那裏」命令。我看了一下sendAYT方法的源代碼,它似乎將這個字節數組寫入輸出流: static final byte [] _COMMAND_AYT = {(byte)TelnetCommand.IAC,(byte)TelnetCommand.AYT}; 爲什麼不是IAC逃脫?我想特別處理。 – Snps