Javascript-форум (https://javascript.ru/forum/)
-   Работа (https://javascript.ru/forum/job/)
-   -   UDP-сокеты на Flash. (https://javascript.ru/forum/job/24246-udp-sokety-na-flash.html)

B~Vladi 22.12.2011 17:59

UDP-сокеты на Flash.
 
:write:

Маловероятно, что я найду такого человека тут, но всё же.
Ребятки, очень нужна реализация UDP-сокетов на Flash с внешним JavaScript-API.

Т.е. примерно это должно выглядеть так:
var socket = new FlashSocket(ip, port);
socket.on('message', function (response) {

}); // error, close
socket.send(query);
socket.close();


Я знаю, что на флеше это реализовать реально. Если вы знаете другие кроссбраузерные способы, не требующие установки сторонних плагинов - не вопрос. Главное - результат.

Я плохо представляю сколько это будет стоить, но специально для Gozar-а напишу:
Цена - 1000р, способ оплаты - банковский/почтовый перевод, Webmoney или наличными в руки, если вы из Москвы.

devote 22.12.2011 18:08

А кто мешает реализовать это самому? работа с Datagram во флешь конечно же реальна. и в принципе не сложна. Я так понимаю нужно реализовать общение с JavaScript? Дык это еще проще.

Nekromancer 22.12.2011 18:09

devote,
Позволю себе предположить, что человек не знает ActionScript. Обычно по этому и просят выполнить работу, ведь топик как раз в соответствующем разделе.

Gvozd 22.12.2011 18:11

50$
Сделаю прокси к классу http://help.adobe.com/en_US/FlashPla...ramSocket.html
Работать будет с 9-й версии Flash Player

devote 22.12.2011 18:13

Цитата:

Сообщение от Nekromancer
devote,
Позволю себе предположить, что человек не знает ActionScript. Обычно по этому и просят выполнить работу, ведь топик как раз в соответствующем разделе.

да сорри, ступил не посмотрел на раздел сразу.

ЗЫ. Но тем не менее там не сложно, было бы у меня время, написал бы.

B~Vladi 22.12.2011 18:21

Цитата:

Сообщение от Nekromancer
человек не знает ActionScript

Ну да, я лет так 5-7 назад баловался, но сейчас даже не рискну туда лезть.
Gvozd, напиши мне в скайп.

devote 22.12.2011 18:24

Цитата:

Сообщение от B~Vladi
Ну да, я лет так 5-7 назад баловался, но сейчас даже не рискну туда лезть.

И не стоит, язык гавно полное. Такого Г я нигде еще не видел. ИМХО
хотя иногда бывает на нем пишу что-то если требуется кроссбраузерность.

B~Vladi 04.01.2012 01:47

Up :(
Оплата - 1500к.
devote, может у тебя найдется вдруг время?

devote 04.01.2012 01:53

B~Vladi,
а что с Gvozd не срослось?

B~Vladi 04.01.2012 01:54

В двух словах: не справился, он вообще не по этой области в основном. Если интересны подробности - отпишу в личку.

FINoM 04.01.2012 04:30

B~Vladi, а что за задача? Может лучше отталкиваться от нее?

B~Vladi 04.01.2012 07:30

Цитата:

Сообщение от FINoM
а что за задача? Может лучше отталкиваться от нее?

Задача такая:
Есть несколько тысяч удаленных демонов, имеющих некоторое публичное UDP API, т.е. по определённым запросам отдается определённая инфа.
Хотелось бы перенаправить трафик с клиентов на них, минуя мой server-side.

DjDiablo 05.01.2012 12:52

На Flash можно это 100 процентов.
Но мне кажется на java попроще.

чото я не вьехал тебе клиент или сервер нужен )))
Ну вот клиент слущающий порт выглядил бы так.

// библиотеки для сетки
import java.net.*; 
// библиотеки ввода вывода
import java.io.*;
// подключаем пакет для взаимодействия с javaScript
import netscape.javascript.*;


public static void main(String[] args)( 
// отлавливаем исключения
try{
  // создаём  сокет присоединяем к порту 1050 на локальной машине
  DatagramSocket ds = new DatagramSocket(1050); 

  // бесконечный цикл
  while (true){

    // создается дейтаграммный пакет
    DatagramPacket pack =new DatagramPacket(new byte[1024], 1024); 

    // ждём получения пакета
    ds.receive(pack);

    //действие после получения пакета с данными 

    // вывод (пример 1, пригодится для отладки)    
    System.out.println(new String(pack.getData())); 

    // передача данных в javaScript(пример 2)
         // получить ссылку на окно (объект window)
         JSObject win = JSObject.getWindow(this); 

         //  создадим массив аргументов
         String argums[] = new String[1];
         // аргументы
         // при передачи датаграммы из pack.getData() на javaScript, привести данные из pack.getData() к массиву params нужно будет здесь.
         argums[0] = "My message";

         // вызовем пользовательский метод test на JavaScript
         win.call("test", argums);
  } 
)catch(Exception e){
    // действия в случае исключения
    System.out.println(e); 
} 

}


на JAVA практически не пишу так что прошу прощения за неточности если есть.

DjDiablo 05.01.2012 13:23

кажется я понял задачу чуть глубже, ну тогда как то так.

код javaScript
//ccылка на апплет для доступа к методам аплета
           udp=document.applets[0];

           // определяем куда конектимся
           udp.connect("localHost",1500);

           //отправляем запрос
           udp.SetQuere ("hello World");

           // получаем ответ
           function test (data){ 
             alert (data);
           }



Java апплет
import java.awt.*;
// это класс аплета
import java.applet.Applet;

//это для сетки
import java.net.*; 
//нужно для вывода
import java.io.*;
//нужно для вызова методов javaScript
import netscape.javascript.*;

//наш аплет это дочерний класс от класса Applet.
public class myapplet extends Applet {
  //переменная с адресом устанавливается методом connect и храниться в аплете 
  private String host; 
  //переменная с портом устанавливается методом connect и храниться в аплете 
  private int port; 

  // метод инициализации данных для соединения вызывается из javaScript
  public void Connect (String host, int port){ 
         this.host = host; //устанавливаем адрес
         this.port = port; //устанавливаем порт
  }

  // этот метод мы будем вызывать из javaScript для отправления пакета, и последующего получения ответа
  public void sendQuere(String mes){ 
        try{
            // превращаем строку в последовательность байт
            byte[] data = mes.getBytes();

            // получим ip адрес
            InetAddress addr = InetAddress.getByName(host);

            //создадим дейтаграмный пакет
            DatagramPacket pack = new DatagramPacket(data, data.length, addr, port); 

            //создается дейтаграммный сокет
            DatagramSocket ds = new DatagramSocket(); 

            //дейтаграмма отправляется
            ds.send(pack); 
            // закрываем сокет
            ds.close();

            // ура, данные мы отправили давайте теперь дождёмся ответа, хотя за ответами мог бы и другой аплет следить

            // создадим сокет,  устанавливать сокет можно также из метода connect если угодно, но здесь он у нас вписан намертво
            DatagramSocket ds = new DatagramSocket(1050);
            // пакет
            DatagramPacket pack =new DatagramPacket(new byte[1024], 1024);
            // ждём получения пакета
            ds.receive(pack);

         //действие после получения пакета с данными

        // вывод (пример 1, пригодится для отладки)   
        System.out.println(new String(pack.getData()));
 
       // передача данных в javaScript(пример 2)
             // получить ссылку на окно (объект window)
             JSObject win = JSObject.getWindow(this);

             //  создадим массив аргументов
             String argums[] = new String[1];

             // аргументы
             // при передачи датаграммы из pack.getData() на javaScript, привести данные из pack.getData() к массиву params нужно будет здесь.
             argums[0] = "My message";
             // вызовем пользовательский метод test на JavaScript
             win.call("test", argums);         

        }catch(IOException e){
            System.err.println(e); 
        } 
  } 

  public void init() {
      //инициализация чего нибудь в момент создания аплета, если нужно ))
  }  
}

код html

<APPLET CODE=myapplet.class WIDTH=150 HEIGHT=25>
       </APPLET>


p.s.

Код написан только по документации, и непреверен. Так что со всем этим добром я бы на вашем месте обратился на java форум дабы они указали на ошибки или за скромную плату довели пример до рабочего состояния.

Надеюсь хоть как-то помог.

monolithed 05.01.2012 13:55

Цитата:

Сообщение от B~Vladi
реализация UDP-сокетов на Flash с внешним JavaScript-API.

А что ты хочешь получить в итоге? Ведь в основном UDP используется для вывода логов и потокового контента тебе именно это и нужно?
Посмотри Adobe Cirrus/Stratus и Cumulus, они используют RTMFP, второй открытую реализацию. Также советую посмотеть один интересный проект Web-RTC

Gvozd 05.01.2012 15:10

DjDiablo,
Возможность использования Java-аплетов обсуждалась - не катит

monolithed,
читайте внимательнее
Цитата:

Сообщение от B~Vladi
Есть несколько тысяч удаленных демонов, имеющих некоторое публичное UDP API, т.е. по определённым запросам отдается определённая инфа.

причем, эти демоны являются сторонним ПО, и соответственно изменить существующее API не представляется возможным(наверно)
RTMFP - не то, так как это протокол поверх UDP же

DjDiablo 05.01.2012 15:20

Цитата:

Возможность использования Java-аплетов обсуждалась - не катит
да и пофигу, зато размялся ))

А вообще интересно что это за тысячи демонов такие.
неужто B~Vladi с адом пытается связаться и сатану призвать. :lol:
Вот он 2012 год, а я знал что всё начнётся с этого форума, я знал ! ))

Цитата:

А что ты хочешь получить в итоге? Ведь в основном UDP используется для вывода логов и потокового контента
А ведь и правда udp обеспечивающий негарантированную доставку данных, странный выбор для внешнего api.

B~Vladi 05.01.2012 17:44

Цитата:

Сообщение от DjDiablo
странный выбор для внешнего api.

Это не мой выбор.
Цитата:

Сообщение от DjDiablo
интересно что это за тысячи демонов такие

Игровые сервера.

x-yuri 05.01.2012 19:27

Цитата:

Сообщение от Gvozd
Возможность использования Java-аплетов обсуждалась - не катит

почему?

DjDiablo 05.01.2012 20:50

присоеденяюсь к вопросу почему?.
Ведь там предложены уже готовые библиотеки для работы с серверами, в java/php/руби/Python/perl/vb.net. Java библиотеку как раз можно было бы приспособить для клиентcкой стороны.

В крайнем случае, взаимодействие может происходить по общим методам предоставленными прослойкой на javaScript. Но там где это возможно будет работать аплет, а там где аплет не работает взаимодействовать через серверную сторону. Это будет практически 100% покрытие всех платформ (даже выше чем у flash).

Gozar 05.01.2012 21:41

Цитата:

Сообщение от x-yuri (Сообщение 148197)
почему?

А мне почему-то кажется, что ответ написан в первом сообщении:
Цитата:

Сообщение от B~Vladi (Сообщение 145337)
Если вы знаете другие кроссбраузерные способы, не требующие установки сторонних плагинов - не вопрос. Главное - результат.

На флешь ещё как-то можно понадеяться, а вот на java аплеты я бы не стал.

B~Vladi 05.01.2012 21:50

Цитата:

Сообщение от DjDiablo
покрытие всех платформ (даже выше чем у flash)

Java по-умолчанию не стоит на компах.

PeaceCoder 17.01.2014 21:51

Подниму-ка тему. Влади, ты нашел такое? Потому как я тоже столнулся с поисками UDP на флеше. В хроме пробегала както chrome.experements.socket но его закрыли. А доступен только в аппликейшинах как chrome.socket.


Часовой пояс GMT +3, время: 01:26.