B~Vladi, а что за задача? Может лучше отталкиваться от нее?
|
Цитата:
Есть несколько тысяч удаленных демонов, имеющих некоторое публичное UDP API, т.е. по определённым запросам отдается определённая инфа. Хотелось бы перенаправить трафик с клиентов на них, минуя мой server-side. |
На 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 практически не пишу так что прошу прощения за неточности если есть. |
кажется я понял задачу чуть глубже, ну тогда как то так.
код 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 форум дабы они указали на ошибки или за скромную плату довели пример до рабочего состояния. Надеюсь хоть как-то помог. |
Цитата:
Посмотри Adobe Cirrus/Stratus и Cumulus, они используют RTMFP, второй открытую реализацию. Также советую посмотеть один интересный проект Web-RTC |
DjDiablo,
Возможность использования Java-аплетов обсуждалась - не катит monolithed, читайте внимательнее Цитата:
RTMFP - не то, так как это протокол поверх UDP же |
Цитата:
А вообще интересно что это за тысячи демонов такие. неужто B~Vladi с адом пытается связаться и сатану призвать. :lol: Вот он 2012 год, а я знал что всё начнётся с этого форума, я знал ! )) Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
присоеденяюсь к вопросу почему?.
Ведь там предложены уже готовые библиотеки для работы с серверами, в java/php/руби/Python/perl/vb.net. Java библиотеку как раз можно было бы приспособить для клиентcкой стороны. В крайнем случае, взаимодействие может происходить по общим методам предоставленными прослойкой на javaScript. Но там где это возможно будет работать аплет, а там где аплет не работает взаимодействовать через серверную сторону. Это будет практически 100% покрытие всех платформ (даже выше чем у flash). |
| Часовой пояс GMT +3, время: 10:24. |