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>