2012-03-11 2 views
2

Я создал объекты Socket и ServerSocket в as3, затем подключил сокет, используя метод connect, передав ему хост и порт. Также я сделал объект ServerSocket, который прослушивал входящее соединение из сокета, отличного от сокета, который я только что создал. Когда ServerSocket обнаруживает соединение и начинает принимать данные, объект сокета отключается автоматически. Поэтому я хочу знать, как поддерживать связь в объекте сокета.Сокеты автоматически отключены в AS3

+2

Звучит как проблема безопасности для меня ... Существует ли у вашего сервера междоменная политика? – weltraumpirat

+0

Я считаю, что @weltraumpirat прямо на деньги здесь. Скорее всего, проблема безопасности. Вы должны убедиться, что, когда соединительный сокет запрашивает файл политики безопасности сокета, который вы обслуживаете, как и следовало ожидать. Я свяжусь с ответом, который разрешит это для вас. –

ответ

3

Я отправляю это как ответ, а не просто ссылаюсь на этот вопрос как дубликат, потому что ваша проблема не совсем такая же, как вопрос и ответ. Я расскажу здесь. Ответ я ссылка на ресурсы, однако предоставляет, которые помогут понять модель безопасности за соединительные гнездами, которые по моему мнению, этот вопрос здесь:

air 2.6 serversocket and actionscript 3 socket connection

Отрывок из связанного ресурса, который демонстрирует «рукопожатие "где файл политики передается в гнездо подключения:

private function handshakeHandler(event:ProgressEvent):void 
{ 
    var socket:Socket = event.target as Socket; 

    //Read the message from the socket 
    var message:String = socket.readUTFBytes(socket.bytesAvailable); 
    logCallback("Received: " + message); 
    if(message == "") 
    { 
     var policy:String = '\x00'; 
     socket.writeUTFBytes(policy); 
     socket.flush(); 
     socket.close(); 
     logCallback("Sending policy: " + policy); 
    } else if (message == "BEGIN") 
    { 
     socket.removeEventListener(ProgressEvent.SOCKET_DATA, handshakeHandler); 
     socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); 
     socket.writeUTFBytes("READY"); 
     socket.flush(); 
    } 
} 

файл политики, используемый в этом примере:

<cross-domain-policy> 
    <allow-access-from domain="*" to-ports="8087" /> 
    </cross-domain-policy>\x00 

 Смежные вопросы

  • Нет связанных вопросов^_^