패키지 | 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()
메서드를 호출합니다. 수신 상태에서 ServerSocket 객체는 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
상수는 close
이벤트 객체의 type
속성 값을 정의합니다.
이 이벤트에는 다음과 같은 속성이 있습니다.
속성 | 값 |
---|---|
bubbles | false |
cancelable | false . 취소할 기본 비헤이비어가 없습니다. |
currentTarget | 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다. |
target | 연결이 종료된 객체입니다. |
connect | 이벤트 |
flash.events.ServerSocketConnectEvent
속성 ServerSocketConnectEvent.type =
flash.events.ServerSocketConnectEvent.CONNECT
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 2 |
원격 소켓에서 이 서버 소켓에 대한 연결을 검색하는 경우 전달됩니다.
ServerSocketConnectEvent
이벤트 객체의 type
속성 값을 정의합니다.
이 이벤트에는 다음과 같은 속성이 있습니다.
속성 | 값 |
---|---|
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, 03:17 PM Z