Я создал объекты Socket и ServerSocket в as3, затем подключил сокет с помощью метода connect, передав ему хост и порт. Также я сделал объект ServerSocket прослушиванием входящего соединения из сокета, отличного от сокета, который я только что создал. Когда ServerSocket обнаруживает соединение и начинает получать данные, объект сокета автоматически отключается. Итак, я хочу знать, как сохранить соединение в объекте сокета.
Сокеты отключаются автоматически в AS3
comment
Для меня это звучит как проблема безопасности... Есть ли на вашем сервере междоменная политика?
- person weltraumpirat   schedule 11.03.2012
comment
Я считаю, что @weltraumpirat здесь прав на деньги. Скорее всего проблема с безопасностью. Вы должны убедиться, что когда подключающийся сокет запрашивает файл политики безопасности сокета, вы его обслуживаете, как и должны. Я дам ссылку на ответ, который решит это для вас.
- person   schedule 12.03.2012
Ответы (1)
Я публикую это как ответ, а не просто ссылаюсь на этот вопрос как на дубликат, потому что ваша проблема не совсем совпадает с вопросом и ответом, на которые я собираюсь ссылаться здесь. Однако ответ, на который я ссылаюсь, предоставляет ресурсы, которые помогут вам понять модель безопасности, стоящую за подключением сокетов, что, как я считаю, является проблемой здесь:
air 2.6 serversocket и 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
person
Community
schedule
11.03.2012