Pull to refresh

Flex3. Сокетные соединения (Socket connections) Часть 2

Reading time4 min
Views3.7K
Продолжение перевода Socket Connections Часть 1

  • XMLSocket.connect () может подключаться только к тем компьютерам которые расположены в том же домене, где и находится сам SWF файл. Это ограничение не применяется для SWF файлов запущенных с локального диска. (Это ограничение является идентичным правилам безопасности для URLLoader.load ().) Для подключения к серверному демону выполняющемся в другом домене, отличного от того где находится SWF, на сервере можно создать файл политики безопасности в котором можно прописать разрешение на получение доступа из другого домена.

Примечание: Настройка сервера для работы с объектом XMLSocket может оказаться весьма непростым занятием. Поэтому, если ваше приложение не требует взаимодействия в реальном времени, используйте класс URLLoader вместо класса XMLSocket.

Вы можете использовать методы XMLSocket.connect() и XMLSocket.send() класса XMLSocket для передачи данных XML на сервер через сокет-соединение. Метод XMLSocket.connect() устанавливает соединение с портом веб-сервера. Метод XMLSocket.send() отсылает XML объект на сервер с помощью установленного сокет-соединения.

Когда вызывается метод XMLSocket.connect(), Flash Player открывает TCP/IP соединение с сервером и сохраняет его открытым до тех пор, пока не произойlёт одно из следующих событий:
  • Вызван метод XMLSocket.close() класса XMLSocket.
  • Больше нет ссылки на существующий объект XMLSocket.
  • Завершение работы Flash Player'а
  • Разрыв соединения (например, отсоединение модема).

Создание Java XML Socket сервера и подключение к нему


Следующий код демонстрирует простой XML Socket сервер написанный на Java, принимающий входящие соединения и отображает принятые сообщения в окне командной строки. По умолчанию новый сервер создается на 8080 порту вашего компьютера, хотя вы можете указать и другой номер порта, при запуске сервера из командной строки.

Создайте новый текстовый документ и добавьте в него следующий код:

import java.io.*;
import java.net.*;
class SimpleServer{
    private static SimpleServer server;
    ServerSocket socket;
    Socket incoming;
    BufferedReader readerIn;
    PrintStream printOut;
    public static void main(String[] args){
        int port = 8080;
        try{
            port = Integer.parseInt(args[0]);
        } catch (ArrayIndexOutOfBoundsException e) {
            // Catch exception and keep going.
        }
        server = new SimpleServer(port);
    }

    private SimpleServer(int port) {
        System.out.println(">> Starting SimpleServer");
        try{
            socket = new ServerSocket(port);
            incoming = socket.accept();
            readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
            printOut = new PrintStream(incoming.getOutputStream());
            printOut.println("Enter EXIT to exit.\r");
            out("Enter EXIT to exit.\r");
            boolean done = false;
            while (!done){
                String str = readerIn.readLine();
                if (str == null){
                    done = true;
                }else{
                    out("Echo: " + str + "\r");
                    if(str.trim().equals("EXIT")){
                        done = true;
                    }
                }
                incoming.close();
            }
        }
        catch (Exception e){
            System.out.println(e);
        }
    }
    private void out(String str){
        printOut.println(str);
        System.out.println(str);
    }
}


Сохраните документ на диске ка SimpleServer.java и скомпилируйте используя Java компилятор, который создаст Java файл с именем SimpleServer.class Вы можете запустить XML сокет сервер открыв командную строку и набрав java SimpleServer. Файл SimpleServer.class может быть расположен в любом месте вашего компьютера или в сети; совершенно не обязательно его располагать его в корневой директории вашего веб-сервера.

Если вам не удаётся запустить сервер из-за того, что не найден путь к Java классу, попробуйте так java -classpath. SimpleServer. (Мои познания в Java не столь глубоки, так что если я некорректно сформулировал перевод данного абзаца прошу меня поправить)

Для создания подключения XMLSocket из вашего приложения ActionScript, нужно создать новый экземпляр класса XMLSocket, и вызвать метод XMLSocket.connect() указав имя хоста и номер порта, а именно:

var xmlsock:XMLSocket = new XMLSocket();
xmlsock.connect("127.0.0.1", 8080);


Событие securityError (flash.events.SecurityErrorEvent) может возникнуть, если происходит вызов XMLSocket.connect() и происходит попытка соединится с сервером находящимся за пределами песочницы безопасности или если номер указанного порта меньше 1024.

Всякий раз при получении данных от сервера срабатывает событие DATA (flash.events.DataEvent.DATA):

xmlsock.addEventListener(DataEvent.DATA, onData);
private function onData(event:DataEvent):void{
    trace("[" + event.type + "] " + event.data);
}


Отправить данные XMLSocket серверу можно используется метод XMLSocket.send() с передачей в качестве параметра XML объекта или строки. Flash Player преобразует указанный параметр в объект типа String, и передает содержимое, XMLSocket серверу, добавляя в конце нулевой (0) байт.

xmlsock.send(xmlFormattedData);

Метод XMLSocket.send() не возвращает какое либо значение подтверждающее, что данные переданы успешно. Если при передаче происходит ошибка, то выбрасывается исключение типа IOError.

Каждое отправленное XML сообщение сокет-сервером должно завершаться символом начала новой строки (\n)

Заранее благодарю за ваши конструктивные комментарии, и искренне надеюсь, что этот перевод будет кому-то полезен и поможет решить поставленные задачи.
Tags:
Hubs:
+3
Comments6

Articles