IT.BLOG

アクセスカウンタ

help リーダーに追加 RSS Telnetプログラム

<<   作成日時 : 2008/12/15 16:27   >>

ブログ気持玉 0 / トラックバック 1 / コメント 0

プログラム概要
@指定した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);
}
}
}

月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(1件)

タイトル (本文) ブログ名/日時
Java SAMPLE CODE
文字列編集 文字列分割、文字列比較 ...続きを見る
IT.BLOG
2009/05/15 13:12

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文