|
プログラム概要 @指定したIPアドレス先にTelnetログインする。 Aコマンド入力を行う。 Bログアウトします。 ※最低でも赤字の部分は編集する必要があります。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import org.apache.commons.net.telnet.TelnetClient; public class Test { public static void main(String[] args){ // 各TelnetServiceクラスのインスタントの作成 TelnetService ts = new TelnetService(); // クライアントの生成 TelnetClient telnet = new TelnetClient(); if(!ts.telnetConnect(telnet)){ System.out.println("Telnet先に接続失敗しました"); } // 通信用の入出力ストリームの生成(telnet) InputStream istream = telnet.getInputStream(); OutputStream ostream = telnet.getOutputStream(); Reader Reader = new InputStreamReader( istream ); Writer writer = new OutputStreamWriter( ostream ); BufferedReader Breader = new BufferedReader(Reader); // Telnet先へログイン ts.telnetDoLogin(telnet, ts, Breader, writer); // サーバー側の文字コードをSJISに変更する changeMCode(writer); // コマンド入力 readKeyWriter(writer); // Telnet先からのログアウト ts.telnetDoLoout(telnet, ts); } public static void changeMCode(Writer writer){ // サーバー側の文字コードをSJISに変更する try { // コマンド入力 writer.write("setterm -x SJIS" + "\n"); writer.flush(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } // キーボードからTelnet先へコマンド入力 public static void readKeyWriter(Writer writer){ System.out.println("コマンドを入力してください"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { String Comannd; do{ // endとにゅうりょくされるまで処理を続ける Comannd = br.readLine(); System.out.println("入力されたコマンドは" + Comannd +"となります"); if(!Comannd.equals("end")){ writer.write(Comannd); writer.flush(); } }while(Comannd.equals("end")); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } } *********************************************************************************** import java.io.*; import java.net.SocketException; import java.util.regex.Pattern; import java.util.regex.Matcher; import javax.swing.JOptionPane; import org.apache.commons.net.telnet.TelnetClient; /** * telnet処理の関連クラス * */ public class TelnetService { /** * telnetにconnectするメソッド * @param telnetclinet TelnetClientクラスのインスタント * @param textarea JTextAreaクラスのインスタント * @return puyopuyo2サーバーに接続 or 未接続 */ public boolean telnetConnect(TelnetClient telnetclinet){ // サーバに接続 try{ telnetclinet.connect( "接続先IPアドレス" ); }catch(SocketException e){ e.printStackTrace(); System.out.println("SocketExceptionエラーによりconnect失敗\n"); return false; }catch(IOException e1){ e1.printStackTrace(); System.out.println("IOExceptionエラーによりconnect失敗\n"); return false; } return true; } /** * telnetにログイン認証するメソッド * @param telnet TelnetClientクラスのインスタント * @param ts TelnetServiceクラスのインスタント * @param reader Readerクラスのインスタント * @param writer Writerクラスのインスタント */ public void telnetDoLogin(TelnetClient telnet, TelnetService ts, BufferedReader reader, Writer writer){ String userID = "接続先USERID"; String password = "接続先パスワード"; // 認証の実行 try { ts.readoneBuferMessage(reader, ".*login: $"); writer.write( userID + "\n" ); writer.flush(); ts.readoneBuferMessage(reader, "Password: $"); writer.write( password + "\n" ); writer.flush(); } catch (Exception e) { // TODO 自動生成された catch ブロック JOptionPane.showMessageDialog(null,"エラーが発生しました。\nPUYOPUYO2にログインできませんでした" ,"エラー表示",JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } } /** * telnet先からログアウトをするメソッド * @param telnet * @param ts */ public void telnetDoLoout(TelnetClient telnet, TelnetService ts){ if(telnet.isConnected()){ // ネットワークの切断 try { telnet.disconnect(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } } /** * 特定のメッセージが出力されるまで、サーバからのメッセージを読み込む(messageが文字列中に含まれる) * @author hogawa * @param reader Readerクラスのインスタント * @param message 特定のメッセージ * @exception Exception */ public String readoneBuferMessage(BufferedReader reader, String message) throws Exception { Pattern pattern = Pattern.compile( message, Pattern.DOTALL ); StringBuffer buffer = new StringBuffer(); Matcher matcher = null; while( true ) { int c = reader.read(); if (c < 0) break; buffer.append((char)c); if (reader.ready() == false) { matcher = pattern.matcher( buffer.toString() ); if (matcher.find()) break; } } try{ if (matcher.find(0) && matcher.groupCount() >= 1) { return( matcher.group(1) ); } return( null ); }catch(Exception e){ return(null); } } } |
| << 前記事(2008/12/15) | トップへ | 後記事(2008/12/15)>> |
| タイトル (本文) | ブログ名/日時 |
|---|---|
Java SAMPLE CODE
文字列編集 文字列分割、文字列比較 ...続きを見る |
IT.BLOG 2009/05/15 13:12 |
| 内 容 | ニックネーム/日時 |
|---|
| << 前記事(2008/12/15) | トップへ | 後記事(2008/12/15)>> |