パッケージ | flash.net |
クラス | public class ServerSocket |
継承 | ServerSocket EventDispatcher Object |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
AIR プロファイルのサポート:この機能はすべてのデスクトップオペレーティングシステム、iOS(AIR 3.8 以降)、Android(AIR 3.8 以降)でサポートされます。この機能は、AIR for TV デバイスではサポートされません。ServerSocket.isSupported
プロパティを使用して、サポートされているかどうかを実行時にテストすることができます。複数のプロファイル間での API サポートについて詳しくは、AIR プロファイルのサポートを参照してください。
TCP サーバーはリモートクライアントからの受信接続を待機します。クライアントが接続しようとすると、ServerSocket が connect
イベントを送出します。このイベントで送出される ServerSocketConnectEvent オブジェクトはサーバーとクライアント間の TCP 接続を表す Socket オブジェクトを提供します。接続したクライアントとのその後の通信で、この Socket オブジェクトを使用します。必要な場合は、Socket オブジェクトからクライアントアドレスとポートを取得できます。
注意:アプリケーションは、クライアント Socket オブジェクトへの参照を維持します。維持を行わない場合、このオブジェクトはガベージコレクションの対象となり、警告を表示せずにランタイムによって破棄される可能性があります。
ServerSocket オブジェクトを待機状態にするには、listen()
メソッドを呼び出します。待機状態では、TCP プロトコルを使用するクライアントがバインドされたアドレスおよびポートに接続しようとするたびに、サーバーソケットオブジェクトが connect
イベントを送出します。ServerSocket オブジェクトは close()
メソッドを呼び出すまで追加の接続を待機し続けます。
TCP 接続は永続的であり、接続の一端が閉じられるまで(あるいは重大なネットワークエラーが発生するまで)維持されます。この接続を経由して送信されるデータは、伝送可能なパケットに分割され、接続の終端でもう一度組み立てられます。すべてのパケットは妥当な範囲で到着することが保証され、消失パケットは再送信されません。 通常、TCP プロトコルによる利用可能なネットワーク帯域幅の管理は UDP プロトコルよりも優れています。ソケット通信を必要とするほとんどの AIR アプリケーションは、DatagramSocket クラスではなく ServerSocket および Socket クラスを使用しているはずです。
ServerSocket クラスは Adobe AIR アプリケーションでのみ使用でき、アプリケーションセキュリティサンドボックスでのみ使用できます。
セキュリティについて詳しくは、Flash Player デベロッパーセンターのトピック:セキュリティを参照してください。
関連する API エレメント
プロパティ | 定義元 | ||
---|---|---|---|
bound : Boolean [読み取り専用]
ソケットが現在ローカルのアドレスとポートにバインドされているかどうかを示します。 | ServerSocket | ||
constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | ||
isSupported : Boolean [静的] [読み取り専用]
ServerSocket 機能がランタイム環境でサポートされているかどうかを示します。 | ServerSocket | ||
listening : Boolean [読み取り専用]
サーバーソケットが受信接続を待機しているかどうかを示します。 | ServerSocket | ||
localAddress : String [読み取り専用]
ソケットが待機している IP アドレス。 | ServerSocket | ||
localPort : int [読み取り専用]
ソケットが待機しているポート。 | ServerSocket |
メソッド | 定義元 | ||
---|---|---|---|
ServerSocket オブジェクトを作成します。 | ServerSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。 | EventDispatcher | ||
指定されたローカルのアドレスおよびポートにこのソケットをバインドします。 | ServerSocket | ||
ソケットを閉じて、接続の待機を停止します。 | ServerSocket | ||
イベントをイベントフローに送出します。 | EventDispatcher | ||
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。 | EventDispatcher | ||
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | ||
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | ||
バインドされた IP アドレスおよびポートで TCP 接続の待機を開始します。 | ServerSocket | ||
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | ||
EventDispatcher オブジェクトからリスナーを削除します。 | EventDispatcher | ||
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | ||
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのプリミティブな値を返します。 | Object | ||
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。 | EventDispatcher |
イベント | 概要 | 定義元 | ||
---|---|---|---|---|
[ブロードキャストイベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを取得して、アクティブになったときに送出されます。 | EventDispatcher | |||
オペレーティングシステムがこのソケットを閉じたときに送出されます。 | ServerSocket | |||
リモートソケットがこのサーバーソケットに接続しようとするときに送出されます。 | ServerSocket | |||
[ブロードキャストイベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを失って、非アクティブになったときに送出されます。 | EventDispatcher |
bound | プロパティ |
isSupported | プロパティ |
listening | プロパティ |
localAddress | プロパティ |
localPort | プロパティ |
ServerSocket | () | コンストラクター |
public function ServerSocket()
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
ServerSocket オブジェクトを作成します。
例外
SecurityError — コンテンツの呼び出しが AIR アプリケーションセキュリティサンドボックス外で実行される場合にこのエラーが発生します。
|
bind | () | メソッド |
public function bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
指定されたローカルのアドレスおよびポートにこのソケットをバインドします。
パラメーター
localPort:int (default = 0 ) — ローカルコンピューター上でバインドするポートの数。localPort が 0(デフォルト)に設定されている場合、次に利用可能なシステムポートがバインドされます。1024 より下位のポート番号に接続する権限には、システムのセキュリティポリシーが適用されます。例えば、Mac および Linux システムでは、アプリケーションは 1024 より下位のポートに接続するにはルート権限で実行する必要があります。
| |
localAddress:String (default = "0.0.0.0 ") — バインド先のローカルマシンの IP アドレス。このアドレスは、IPv4 アドレスでも IPv6 アドレスでもかまいません。localAddress が 0.0.0.0 (デフォルト値)に設定されている場合、ソケットは利用可能なすべての IPv4 アドレスを監視します。利用可能なすべての IPv6 アドレスを監視するには、"::" を localAddress 引数として指定する必要があります。IPv6 アドレスを使用するには、コンピューターとネットワークの両方が IPv6 をサポートするように設定されている必要があります。 さらに、IPv4 アドレスにバインドされたソケットは IPv6 アドレスのソケットに接続できません。同様に、IPv6 アドレスにバインドされたソケットは IPv4 アドレスのソケットに接続できません。アドレスの種類が一致している必要があります。
|
例外
RangeError — このエラーは、localPort が 0 未満か、または 65535 より大きい場合に発生します。
| |
ArgumentError — このエラーは、localAddress が構文的に整形式の IP アドレスになっていない場合に発生します。
| |
IOError — ソケットがバインドできないとき。例えば、次のような場合です。
|
close | () | メソッド |
listen | () | メソッド |
public function listen(backlog:int = 0):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
バインドされた IP アドレスおよびポートで TCP 接続の待機を開始します。
listen()
メソッドは直ちに戻ります。listen()
を呼び出すと、接続が試みられたときに必ず、ServerSocket オブジェクトによって connect
イベントが送出されます。ServerSocketConnectEvent イベントオブジェクトの socket
プロパティは、サーバークライアント接続を表す Socket オブジェクトを参照します。
backlog
パラメーターは connect
イベントがアプリケーションで処理されている間にキューで待機する接続の数を指定します。キューがいっぱいの場合、追加の接続は connect
イベントが送出されることなく拒否されます。デフォルトの値 0 が指定されると、システムの最大のキューの長さが使用されます。この長さはプラットフォームによって異なり、コンピューター別に設定できます。 指定された値がシステムの最大の長さを超えると、代わりにシステムの最大の長さが使用されます。 実際のバックログ値を検出する手段が提供されていません。(システムの最大値は、ホストコンピューター上の TCP ネットワークサブシステムの SOMAXCONN 設定によって決まります。)
パラメーター
backlog:int (default = 0 ) — 待機接続のキューの最大の長さです。backlog が 0 の場合、このキューの長さはシステムに最大値に設定されます。
|
例外
IOError — このエラーはソケットが開いていないか、バインドされていない場合に発生します。このエラーは、listen() の呼び出しがその他の理由で失敗したときにも発生します。
| |
RangeError — このエラーは、backlog パラメーターが 0 より小さい場合に発生します。
|
close | イベント |
flash.events.Event
プロパティ Event.type =
flash.events.Event.CLOSE
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
オペレーティングシステムがこのソケットを閉じたときに送出されます。
close
イベントは、ServerSocket close()
メソッドが呼び出されるときに送出されません。アプリケーション内の他のオブジェクトは close
イベントに依存し、close()
メソッドを呼び出す前に手動でイベントを送出できます。
Event.CLOSE
定数は、type
プロパティ(close
イベントオブジェクト)の値を定義します。
このイベントには、次のプロパティがあります。
プロパティ | 値 |
---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
target | 接続が閉じられたオブジェクトです。 |
connect | イベント |
flash.events.ServerSocketConnectEvent
プロパティ ServerSocketConnectEvent.type =
flash.events.ServerSocketConnectEvent.CONNECT
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
リモートソケットがこのサーバーソケットに接続しようとするときに送出されます。
type
プロパティ(ServerSocketConnectEvent
イベントオブジェクト)の値を定義します。
このイベントには、次のプロパティがあります。
プロパティ | 値 |
---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | この ServerSocket オブジェクトです。 |
target | この ServerSocket オブジェクトです。 |
socket | 新しい接続を表す Socket オブジェクトです。 |
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.ProgressEvent; import flash.events.ServerSocketConnectEvent; import flash.net.ServerSocket; import flash.net.Socket; import flash.text.TextField; import flash.text.TextFieldType; import flash.utils.ByteArray; public class ServerSocketExample extends Sprite { private var serverSocket:ServerSocket = new ServerSocket(); private var clientSocket:Socket; private var localIP:TextField; private var localPort:TextField; private var logField:TextField; private var message:TextField; public function ServerSocketExample() { setupUI(); } private function onConnect( event:ServerSocketConnectEvent ):void { clientSocket = event.socket; clientSocket.addEventListener( ProgressEvent.SOCKET_DATA, onClientSocketData ); log( "Connection from " + clientSocket.remoteAddress + ":" + clientSocket.remotePort ); } private function onClientSocketData( event:ProgressEvent ):void { var buffer:ByteArray = new ByteArray(); clientSocket.readBytes( buffer, 0, clientSocket.bytesAvailable ); log( "Received: " + buffer.toString() ); } private function bind( event:Event ):void { if( serverSocket.bound ) { serverSocket.close(); serverSocket = new ServerSocket(); } serverSocket.bind( parseInt( localPort.text ), localIP.text ); serverSocket.addEventListener( ServerSocketConnectEvent.CONNECT, onConnect ); serverSocket.listen(); log( "Bound to: " + serverSocket.localAddress + ":" + serverSocket.localPort ); } private function send( event:Event ):void { try { if( clientSocket != null && clientSocket.connected ) { clientSocket.writeUTFBytes( message.text ); clientSocket.flush(); log( "Sent message to " + clientSocket.remoteAddress + ":" + clientSocket.remotePort ); } else log("No socket connection."); } catch ( error:Error ) { log( error.message ); } } private function log( text:String ):void { logField.appendText( text + "\n" ); logField.scrollV = logField.maxScrollV; trace( text ); } private function setupUI():void { localIP = createTextField( 10, 10, "Local IP", "0.0.0.0"); localPort = createTextField( 10, 35, "Local port", "0" ); createTextButton( 170, 60, "Bind", bind ); message = createTextField( 10, 85, "Message", "Lucy can't drink milk." ); createTextButton( 170, 110, "Send", send ); logField = createTextField( 10, 135, "Log", "", false, 200 ) this.stage.nativeWindow.activate(); } private function createTextField( x:int, y:int, label:String, defaultValue:String = '', editable:Boolean = true, height:int = 20 ):TextField { var labelField:TextField = new TextField(); labelField.text = label; labelField.type = TextFieldType.DYNAMIC; labelField.width = 100; labelField.x = x; labelField.y = y; var input:TextField = new TextField(); input.text = defaultValue; input.type = TextFieldType.INPUT; input.border = editable; input.selectable = editable; input.width = 280; input.height = height; input.x = x + labelField.width; input.y = y; this.addChild( labelField ); this.addChild( input ); return input; } private function createTextButton( x:int, y:int, label:String, clickHandler:Function ):TextField { var button:TextField = new TextField(); button.htmlText = "<u><b>" + label + "</b></u>"; button.type = TextFieldType.DYNAMIC; button.selectable = false; button.width = 180; button.x = x; button.y = y; button.addEventListener( MouseEvent.CLICK, clickHandler ); this.addChild( button ); return button; } } }
Tue Jun 12 2018, 10:34 AM Z