동일한 응용 프로그램의 두 인스턴스가 서로 이야기하려고 할 때 ServerSocketConnectEvent가 실행되지 않습니다. 내 시나리오는 다음과 같습니다.Adobe AIR : ServerSocketConnectEvent가 로컬 호스트 연결을 위해 실행되지 않음
localhost를 통해 다른 인스턴스와 통신하는 AS3 Adobe AIR 앱이 있습니다. 두 응용 프로그램은 포트에서 수신 대기하고 서로 다른 포트에 연결하려고합니다. 즉, 인스턴스 1은 포트 50000에서 수신 대기하고 인스턴스 2의 포트 50001에 연결하려고 시도합니다.이 포트 2는 포트 50001에서 수신 대기하고 포트 50000에 연결하려고 시도합니다. 연결이 설정 될 때까지 응용 프로그램은 100ms마다 서로 연결을 시도합니다. RawCap을 사용하여 로컬 호스트의 데이터를 캡처했으며 대상 포트 50000과 50001에 대한 패킷의 인터리빙을 확인했습니다.
내 설정은 FlashDevelop에서 디버그 모드로 실행하고 번들로 EXE를 실행하는 것으로 구성됩니다 이 응용 프로그램의 여러 인스턴스를 가질 수 있습니다 : How to get ability to start up multiple same Adobe Air applications?). ServerSocketConnectEvent.CONNECT fire가 표시되지 않습니다. 다음은 관련 코드입니다.
// triggered by clicking on a sprite
public function onClickConnect(event:MouseEvent):void
{
m_connect.disable();
m_serverSocket = createServerSocket(int(m_localPortText.text));
m_remoteSocket = new Socket();
m_remoteSocket.addEventListener(Event.CONNECT, connectionMade);
m_remoteSocket.addEventListener(Event.CLOSE, connectionClosed);
m_remoteSocket.addEventListener(IOErrorEvent.IO_ERROR, socketFailure);
m_remoteSocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityError);
//m_remoteSocket.addEventListener(ProgressEvent.SOCKET_DATA, dataReceived);
m_retryTimer = new Timer(100);
m_retryTimer.addEventListener(TimerEvent.TIMER, connectToRemote);
m_retryTimer.start();
}
// this retries connecting to the remote client
public function connectToRemote(event:TimerEvent):void
{
try
{
//Try to connect
m_remoteSocket.connect("127.0.0.1", int(m_remotePortText.text));
}
catch(e:Error) { trace(e); }
}
public function createServerSocket(port:int):Socket
{
try
{
// Create the server socket
var serverSocket:ServerSocket = new ServerSocket();
// Add the event listener
serverSocket.addEventListener(ServerSocketConnectEvent.CONNECT, gotConnection);
//serverSocket.addEventListener(Event.CLOSE, onClose);
serverSocket.bind(port, "127.0.0.1");
// Listen for connections
serverSocket.listen();
// this prints fine
trace("Listening on " + serverSocket.localAddress + ":" + serverSocket.localPort);
}
catch (e:Error)
{
trace(e);
}
return m_serverSocket;
}
// this is for connections from clients
// it never fires
public function gotConnection(event:ServerSocketConnectEvent):void
{
//The socket is provided by the event object
m_serverSocket = event.socket;
trace("Connected to client");
}
// this is for connecting to the other app
public function connectionMade(event:Event):void
{
trace(event);
m_retryTimer.stop();
}
public function socketFailure(event:IOErrorEvent):void
{
trace(event);
}
public function connectionClosed(event:Event):void
{
trace(event);
}
public function securityError(event:SecurityErrorEvent):void
{
trace(event);
}
아이디어가 있습니까? 그것은 당신의 서버 소켓과 같은
감사
감사합니다. 내가 직접 쏘는 동안은 실례합니다. –