FlashとPerlでsocket通信をする方法 (AS3.0)

  • hatena bookmark
  • Twitter
  • Delicious
  • Blogger Post
  • Evernote
  • Google Bookmarks
  • Share/Bookmark

ActionScript3.0(AS3.0)とPerlを使って、簡単なsocket(ソケット)通信を行っていきます。
ローカル環境下で仮想サーバを立ち上げて、以下の順に書いています。

  1. サーバ側のプログラムを作る
  2. Perlでクライアント側のプログラムを作る
  3. AS3.0でクライアント側のプログラムを作る(XMLSocketクラスを使用)
仮想サーバの導入が未だの場合:

Apache friendsが提供している「XAMPP」の導入が早いと思います。
http://www.apachefriends.org/jp/xampp.html
また、ステップ・バイ・ステップでインストールや設定は以下のサイトが非常に解り易く解説されています。
http://phpspot.net/php/pgXAMPP.html


1. サーバ側のプログラムを作る

まず始めにサーバ側のプログラムを作ってみます。
IO::Socketという便利なモジュールがありますので、これを使って作っていきます。

use IO::Socket;

my( $port, $protocol ) = ( 9000, 'tcp' );

my $listening = IO::Socket::INET -> new(
	LocalPort	=> $port,
	Listen		=> 1,
	Proto		=> $protocol,
	Reuse		=> 1
) or die "Couldn't start server: $!\n";

print "Server ready.\n";

while (1){

	my $socket = $listening -> accept();
	print "Connected.\n";

	while ( <$socket> ){
		print "Post: $_";
		print $socket $_;
	}

	$socket -> close();

	print "Disconnected.\n";

}

3行目でポート番号を指定しています。
9000で指定していますが、1025以上~65535以内であれば問題ないと思います。

起動します。

「Server ready.」と出力されれば、成功です。
「Couldn’t start server」と出力された場合、何かしらの原因で受付準備できません。仮想サーバが立ち上がっているかなど確認して、再度試みてください。

また、クライアント側の接続が切れた場合は26行目の「Disconnected.」を出力します。

2. Perlでクライアント側のプログラムを作る

次にクライアントのプログラムをPerlで作成します。必要のない場合は3の『AS3.0でクライアント側のプログラムを作る』へ進んでください。

use IO::Socket;

my $host = 'localhost';
my $port = 9000;
my $protocol = 'tcp';

my $socket = IO::Socket::INET->new(
	PeerAddr => "$host:$port",
	Proto    => $protocol,
) or die "Couldn't connect.\n";

print "Connected Server.\n";

print $socket "sent text\n";
print my $data = <$socket>;

$socket->close();
print "Disconnected.\n";
<STDIN>;

1のサーバ側のプログラムを起動した状態で、起動します。
「Post: sent text」がサーバ側のプログラム上に表示されたら成功です。

14行目でソケットに値を送っています。
15行目でソケットの値を受け取っています。

3. AS3.0でクライアント側のプログラムを作る

次にクライアントのプログラムをActionScript3.0で作成します。今回、XMLSocketクラス(flash.net.XMLSocket)を使用します。

var socket:XMLSocket = new XMLSocket();

var host:String = "localhost";
var port:uint = 9000;

socket.connect(host, port);

socket.addEventListener( Event.CONNECT, connectHandler );
socket.addEventListener( IOErrorEvent.IO_ERROR, ioErrorHandler);

function connectHandler(event:Event):void {
	var sendText:String = "sent text";
	socket.send ( sendText );
	write( event.type + "\n" + sendText );
}

function ioErrorHandler(event:IOErrorEvent):void {
	write( event.type );
}

function write( s ):void{
	trace( s );
	socket.close();
}

2と同様に、1のサーバ側のプログラムを起動した状態で起動し、
「Post: sent text」がサーバ側のプログラム上に表示されたら成功です。

サーバへの接続が成功した場合は、8行目からconnectHandlerを通過して結果を返します。
この時、13行目でサーバへ値を送ります。

また、何かしらの原因でエラーが発生した場合は、8行目からioErrorHandlerを通過して結果を返します。

  • hatena bookmark
  • Twitter
  • Delicious
  • Blogger Post
  • Evernote
  • Google Bookmarks
  • Share/Bookmark
関連する記事:
  1. ActionScript3.0(AS3.0) – addEventListenerで関数へ引数を渡す
  2. FlashとCGIとの連携の方法 (AS3.0)
  3. Flashで作ったウィジェットを出力する方法(Perl/PHP出力付き)
  4. Papervision3D – primitiveとColladaファイル(.dae)の表示方法 (AS3.0)
コメント 停止中