Проверка файла политики закрывает сокет - PullRequest
0 голосов
/ 27 сентября 2011

Я создал гибкое приложение, которое использует сокеты.Я опубликовал приложение flex в веб-приложении, которое работает на сервере Glassfish.Теперь из этого приложения Flex я создаю сокет-соединение с сервером C # и начинаю отправлять / получать данные.Проблема в том, что после того, как я создаю сокет-соединение с сервером C #, приложение flex сначала проверяет файл политики, а после его получения закрывает сокет, не поддерживая соединение.

Это мой сервер C #:

TcpListener tcpListener = new TcpListener(IPAddress.Parse("172.17.41.211"), 12345);
TcpClient tcpclient = tcpListener.AcceptTcpClient();

Socket client = tcpclient.Client;
while (client.Available > 0)
{
   int bytes = 0;
   byte[] m_aBuffer = new byte[1024];
   bytes = client.Receive(m_aBuffer, m_aBuffer.Length, SocketFlags.None);
   String str = Encoding.ASCII.GetString(m_aBuffer, 0, bytes);
   if (str.StartsWith("<policy-file-request/>"))
   {
      sendBytes = Encoding.ASCII.GetBytes("<cross-domain-policy><allow-access-from domain=\"172.17.41.211\" to-ports=\"12345\"/></cross-domain-policy>\0");
      client.Send(sendBytes);
   }
}

while (client.Connected)
{
   Thread.Sleep(200);
   sendBytes = Encoding.ASCII.GetBytes("message to client");
   client.Send(sendBytes, sendBytes.Length, SocketFlags.None);
}

Теперь гибкий клиент выглядит так:

private var socket:Socket = new Socket();
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(Event.CLOSE, onClose);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onData);
socket.addEventListener(ErrorEvent.ERROR, errorHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);
...
socket.connect("172.17.41.211", 12345);    
...

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

socket.connect("172.17.41.211", 12345));

После того, как я это сделаю, я могу нормально использовать соединение.

Может кто-нибудь подсказать, почему это происходит и, возможно, возможно, не закрывать соединение

1 Ответ

0 голосов
/ 28 сентября 2011

Вы не отправляете файл политики через сам сокет.Это должно быть на другом канале.Например, если вы подключаетесь к какому-либо ip / порту, по умолчанию flash попытается подключиться к тому же ip, но через порт 843, и найдет основной файл политики.

Вы также можете установить его вручную, используя Security.loadPolicyFile(someURL). Более подробную информацию можно найти здесь .

...