この Telnet の例では、Socket クラスを使用してリモートサーバーに接続し、データを伝送する手法を示します。この例では、次の手法を示します。
このサンプルのアプリケーションファイルを入手するには、www.adobe.com/go/learn_programmingAS3samples_flash を参照してください。Telnet アプリケーションのファイルは、Samples/Telnet フォルダにあります。アプリケーションは、次のファイルで構成されています。
|
ファイル |
説明 |
|---|---|
|
TelnetSocket.mxml |
MXML ユーザーインターフェイスからなるメインアプリケーションファイル。 |
|
com/example/programmingas3/Telnet/Telnet.as |
リモートサーバーへの接続、データの送受信と表示など、アプリケーションに Telnet クライアント機能を提供します。 |
メイン TelnetSocket.mxml ファイルは、アプリケーション全体で使用するユーザーインターフェイス(UI)の作成に責任を負います。
このファイルは、UI のほかに、ユーザーを指定されたサーバーに接続するために、login() と sendCommand() の 2 つのメソッドも定義しています。
次のコードは、メインアプリケーションファイル内の ActionScript を示しています。
import com.example.programmingas3.socket.Telnet;
private var telnetClient:Telnet;
private function connect():void
{
telnetClient = new Telnet(serverName.text, int(portNumber.text), output);
console.title = "Connecting to " + serverName.text + ":" + portNumber.text;
console.enabled = true;
}
private function sendCommand():void
{
var ba:ByteArray = new ByteArray();
ba.writeMultiByte(command.text + "\n", "UTF-8");
telnetClient.writeBytesToSocket(ba);
command.text = "";
}
コードの 1 行目は、Telnet クラスをカスタム com.example.programmingas.socket パッケージからインポートします。コードの 2 行目は、Telnet クラスのインスタンス、telnetClient を宣言します。このインスタンスは、後で connect() メソッドによって初期化されます。次に、connect() メソッドが宣言され、前に宣言された telnetClient 変数を初期化します。このメソッドは、ユーザーが指定した Telnet サーバーの名前とポートを引き渡すほか、ソケットサーバーからのテキスト応答の表示に使用される表示リスト上の TextArea コンポーネントへの参照を引き渡します。connect() メソッドの最後の 2 行は、Panel の title プロパティを設定し、Panel コンポーネントを有効にします。このコンポーネントを使用すると、リモートサーバーへデータを送信できます。メインアプリケーションファイル内の最後のメソッド、sendCommand() は、ユーザーのコマンドを ByteArray オブジェクトとしてリモートサーバーへ送信するために使用されます。
Telnet クラスは、リモート Telnet サーバーへの接続と、データの送受信に責任を負います。
Telnet クラスは、次のプライベート変数を宣言します。
private var serverURL:String; private var portNumber:int; private var socket:Socket; private var ta:TextArea; private var state:int = 0;
最初の変数、serverURL は、ユーザーが指定した接続先サーバーアドレスを格納します。
2 番目の変数、portNumber は、Telnet サーバーが現在稼働しているポートの番号です。デフォルトでは、Telnet サービスはポート 23 上で稼働します。
3 番目の変数、socket は、serverURL 変数と portNumber 変数によって定義されたサーバーへの接続を試みる Socket インスタンスです。
4 番目の変数、ta は、ステージ上の TextArea コンポーネントインスタンスへの参照です。このコンポーネントは、リモート Telnet サーバーからの応答やエラーメッセージを表示するために使用されます。
最後の変数、state は、その Telnet クライアントがどのオプションをサポートするかを決定するために使用される数値です。
前に述べたように、Telnet クラスのコンストラクタ関数は、メインアプリケーションファイル内の connect() メソッドによって呼び出されます。
Telnet コンストラクタは server、port および output の 3 つのパラメータを受け取ります。server パラメータと port パラメータは、Telnet サーバーが稼働しているサーバーの名前とポート番号を指定します。最後のパラメータ、output は、サーバーの出力がユーザーに対して表示されるステージ上の TextArea コンポーネントインスタンスへの参照です。
public function Telnet(server:String, port:int, output:TextArea)
{
serverURL = server;
portNumber = port;
ta = output;
socket = new Socket();
socket.addEventListener(Event.CONNECT, connectHandler);
socket.addEventListener(Event.CLOSE, closeHandler);
socket.addEventListener(ErrorEvent.ERROR, errorHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, dataHandler);
Security.loadPolicyFile("http://" + serverURL + "/crossdomain.xml");
try
{
msg("Trying to connect to " + serverURL + ":" + portNumber + "\n");
socket.connect(serverURL, portNumber);
}
catch (error:Error)
{
msg(error.message + "\n");
socket.close();
}
}
ソケット接続にデータを書き込むには、Socket クラス内のいずれかの書き込みメソッド(writeBoolean()、writeByte()、writeBytes()、writeDouble() など)を呼び出した後、flush() メソッドで出力バッファ内のデータをフラッシュします。Telnet サーバー内では、データは writeBytes() メソッドを使用してソケット接続へ書き込まれます。このメソッドは、パラメータとしてバイト配列を受け取り、それを出力バッファへ送信します。writeBytesToSocket() メソッドは、次のとおりです。
public function writeBytesToSocket(ba:ByteArray):void
{
socket.writeBytes(ba);
socket.flush();
}
このメソッドは、メインアプリケーションファイルの sendCommand() メソッドによって呼び出されます。
ソケットサーバーからメッセージを受け取るか、イベントが発生すると、カスタム msg() メソッドが呼び出されます。このメソッドは、ステージ上の TextArea にストリングを付加し、カスタム setScroll() メソッドを呼び出します。これにより、TextArea コンポーネントは最下部までスクロールします。msg() メソッドは、次のとおりです。
private function msg(value:String):void
{
ta.text += value;
setScroll();
}
TextArea コンポーネントの内容を自動的にスクロールしなかった場合、サーバーからの最新の応答を参照するには、テキスト領域にあるスクロールバーを手動でドラッグする必要があります。
setScroll() メソッドには、TextArea コンポーネントの内容を垂直方向にスクロールする 1 行だけの ActionScript が入っており、これにより、ユーザーは返されたテキストの最後の行を見ることができます。次のコードは、setScroll() メソッドを示しています。
public function setScroll():void
{
ta.verticalScrollPosition = ta.maxVerticalScrollPosition;
}
このメソッドは、現在表示されている文字の一番上の行の行番号を示す verticalScrollPosition プロパティを設定し、そのプロパティを maxVerticalScrollPosition プロパティの値に設定します。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート