Продолжение перевода Socket Connections Часть 1
Примечание: Настройка сервера для работы с объектом XMLSocket может оказаться весьма непростым занятием. Поэтому, если ваше приложение не требует взаимодействия в реальном времени, используйте класс URLLoader вместо класса XMLSocket.
Вы можете использовать методы XMLSocket.connect() и XMLSocket.send() класса XMLSocket для передачи данных XML на сервер через сокет-соединение. Метод XMLSocket.connect() устанавливает соединение с портом веб-сервера. Метод XMLSocket.send() отсылает XML объект на сервер с помощью установленного сокет-соединения.
Когда вызывается метод XMLSocket.connect(), Flash Player открывает TCP/IP соединение с сервером и сохраняет его открытым до тех пор, пока не произойlёт одно из следующих событий:
Следующий код демонстрирует простой XML Socket сервер написанный на Java, принимающий входящие соединения и отображает принятые сообщения в окне командной строки. По умолчанию новый сервер создается на 8080 порту вашего компьютера, хотя вы можете указать и другой номер порта, при запуске сервера из командной строки.
Создайте новый текстовый документ и добавьте в него следующий код:
Сохраните документ на диске ка SimpleServer.java и скомпилируйте используя Java компилятор, который создаст Java файл с именем SimpleServer.class Вы можете запустить XML сокет сервер открыв командную строку и набрав java SimpleServer. Файл SimpleServer.class может быть расположен в любом месте вашего компьютера или в сети; совершенно не обязательно его располагать его в корневой директории вашего веб-сервера.
Если вам не удаётся запустить сервер из-за того, что не найден путь к Java классу, попробуйте так java -classpath. SimpleServer. (Мои познания в Java не столь глубоки, так что если я некорректно сформулировал перевод данного абзаца прошу меня поправить)
Для создания подключения XMLSocket из вашего приложения ActionScript, нужно создать новый экземпляр класса XMLSocket, и вызвать метод XMLSocket.connect() указав имя хоста и номер порта, а именно:
Событие securityError (flash.events.SecurityErrorEvent) может возникнуть, если происходит вызов XMLSocket.connect() и происходит попытка соединится с сервером находящимся за пределами песочницы безопасности или если номер указанного порта меньше 1024.
Всякий раз при получении данных от сервера срабатывает событие DATA (flash.events.DataEvent.DATA):
Отправить данные XMLSocket серверу можно используется метод XMLSocket.send() с передачей в качестве параметра XML объекта или строки. Flash Player преобразует указанный параметр в объект типа String, и передает содержимое, XMLSocket серверу, добавляя в конце нулевой (0) байт.
Метод XMLSocket.send() не возвращает какое либо значение подтверждающее, что данные переданы успешно. Если при передаче происходит ошибка, то выбрасывается исключение типа IOError.
Каждое отправленное XML сообщение сокет-сервером должно завершаться символом начала новой строки (\n)
Заранее благодарю за ваши конструктивные комментарии, и искренне надеюсь, что этот перевод будет кому-то полезен и поможет решить поставленные задачи.
- 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)
Заранее благодарю за ваши конструктивные комментарии, и искренне надеюсь, что этот перевод будет кому-то полезен и поможет решить поставленные задачи.