kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

AIR.Socketをつなげる

ServerSocketのテスト。

ServerSocket側

まずは接続を待ち受けるServerSocket。

// craete server socket
serverSocket = new ServerSocket();
serverSocket.bind( 50000 ); // 50000番指定
serverSocket.listen();

Socketプログラミングの経験があれば、簡単。


bind、listenは例外をバンバン投げる。
特にbindは指定ポートが使用済の場合にも例外を投げるので、
実際は色々考えて実装する必要がある。

Socket側

んで、もう一方の方からSocketでつなげる。
ifconfigなり、ipconfigでServer側のIPアドレスを調べて、設定する。

socket = new Socket("192.168.0.5", 50000);

これだけでつながる。
さすがにOOP言語は楽だ。


これだけだとメッセージが受け取れないので、
実際は色々Listenerを加えてやる。


エラー処理をみると、ServerSocketは例外処理、
Socketはエラーイベントの受け取りが必須となっている。
なるほど、ServerSocketは同期的に処理しているから例外、
Socketは非同期に処理しているから、エラーイベントなのか。

ServerSocket側全ソース

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
	initialize="initializeLogic()" close="closeLogic()">
	
	<mx:Script>
		<![CDATA[
		
		private function initializeLogic():void
		{
			try {
				// create server socket
				serverSocket = new ServerSocket();
				serverSocket.bind( 50000 );
				serverSocket.listen();
				serverSocket.addEventListener(ServerSocketConnectEvent.CONNECT, serverSocket_connectHandler);
			}
			catch( e:Error ) {
				trace( e.message );
			}
		}
		
		private function closeLogic():void
		{
			serverSocket.close();
		}
		
		private function serverSocket_connectHandler(event:ServerSocketConnectEvent):void
		{
			trace( "connect !" );
		}
		
		private var serverSocket:ServerSocket;
			
		]]>
	</mx:Script>
	
</mx:WindowedApplication>

Socket側全ソース

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
	initialize="initializeLogic()" close="closeLogic()">
	
	<mx:Script>
		<![CDATA[
		
		private function initializeLogic():void
		{
			// create socket
			var socket:Socket = new Socket("192.168.0.5", 50000);
			socket.addEventListener(Event.CONNECT, socket_connectHandler);
			socket.addEventListener(IOErrorEvent.IO_ERROR, socket_ioErrorHandler);
			socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, socket_securityErrorHandler);
		}
		
		private function closeLogic():void
		{
			if ( socket && socket.connected ) {
				socket.close();
			}
		}
		
		private function socket_connectHandler(event:Event):void
		{
			trace( "socket connect" );
			socket = event.target as Socket;
		}
		
		private function socket_ioErrorHandler(event:IOErrorEvent):void
		{
			trace( "socket io error" );
		}
		
		private function socket_securityErrorHandler(event:SecurityErrorEvent):void
		{
			trace( "socket security error" );
		}
		
		private var socket:Socket;
		
		]]>
	</mx:Script>
	
</mx:WindowedApplication>