TelnetClientって難しい?
Telnet接続をするためのラーニングコードを書いた。
でも下記の問題がどうにもならないし、どこから手をつけていいかさっぱりわからない
。- lsなどを実行すると各要素の前後に変な文字列が表示される。これってカラーコード?例を示したかったんですが、エントリ全体が文字化けするのでやめました。
- ログアウトしてもDisconnectされない
- viなどスクリーン編集したくても、うまくスクロールを制御できない。
TeraTermのコードを覗いてみたが、さっぱりわからない。どうしたらいいのか途方にくれた。標準入力から標準出力へ流すだけのコードをさらしておこう・・・。何かに使うかもしれないし。たぶんRFCを読んで何とかするしかないんだろうな・・・。
インデントが見づらい件はごめんなさい。はてなスーパーPRE記法で色づけしてますが、タブ幅の指定も分かりません。そのうち何とかしよう。
[2007-10-31 追記]
タブ幅が見づらい件は、HTML+CSSではなんともならないことが分かったので、半角4スペースに置換してから上げることに。
package leaning; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.net.telnet.TelnetClient; import org.apache.commons.net.telnet.TelnetCommand; public class TelnetClientLeaning { public static void main(String[] args) throws Exception { final TelnetClient client = new TelnetClient(); Thread connectThread = new Thread(){ @Override public void run() { InputStream inStream = client.getInputStream(); byte[] buff = new byte[256]; while(true){ try{ int numRead = inStream.read(buff); if(TelnetCommand.isValidCommand(buff[0])){ System.out.println(TelnetCommand.getCommand(buff[0])); } if(numRead > 0){ System.out.print(new String(buff,0,numRead,"utf-8")); } }catch(Exception e){ e.printStackTrace(); } } } }; Thread commandThread = new Thread(){ @Override public void run() { OutputStream commandStream = client.getOutputStream(); while(commandStream == null){ commandStream = client.getOutputStream(); } byte[] buff = new byte[256]; while(client.isConnected()){ try{ int numRead = System.in.read(buff); if(numRead > 0){ commandStream.write(buff,0,numRead); commandStream.flush(); } }catch(Exception e){ e.printStackTrace(); } } } }; client.connect("localhost", 8023); connectThread.start(); commandThread.start(); } }