|
|
|
|
|
для: K
(06.06.2009 в 12:39)
| | *Воровато оглядываясь по сторонам*
Посмотрите в сторону .net, там можно писать службы, которые как раз выступают инициаторами. И если вам нужен проект с широкой и сложной бизнес-логикой, то .net - самое оно. | |
|
|
|
|
|
|
|
для: K
(06.06.2009 в 12:39)
| | Итого
На сервере в функции обработки запросов клиентов вызывались функции
public static InetSocketAddress ip;
public static boolean firstClient=true;
public static void testClient(HttpExchange exchange){
if(firstClient){
firstClient=false;
ip=exchange.getRemoteAddress();
System.out.println("testClient ip="+ip);
new Thread(){
public void run(){
try{
sleep(30*1000); // 30 sec
URL url=new URL("http:/"+ip.toString());
URLConnection urlConnect=url.openConnection();
urlConnect.setDoOutput(true);
OutputStream out=urlConnect.getOutputStream();
// --> java.net.ConnectException: Connection refused: connect
out.write("Hellow".getBytes());
urlConnect.setDoInput(true);
InputStream in=urlConnect.getInputStream();
byte buf[] = new byte[64*1024];
int len=0,n;
while((n=in.read(buf,len,buf.length-len))!=-1)
len+=n;
String text = new String(buf, 0, len);
}catch(Exception e){ System.out.println("testClient Exception="+e); }
}
}.start();
}
}
//-----------------------------------------------------------------------------------------
или
//-----------------------------------------------------------------------------------------
public static void testClient(HttpExchange exchange){
if(firstClient){
firstClient=false;
ip=exchange.getRemoteAddress();
System.out.println("testClient ip="+ip);
new Thread(){
public void run(){
try{
sleep(30*1000); // 30 sec
Socket s=new Socket(ip.getHostName(),ip.getPort());
// --> java.net.ConnectException: Connection refused: connect
OutputStream out=s.getOutputStream();
out.write("Hellow".getBytes());
InputStream in=s.getInputStream();
byte buf[] = new byte[64*1024];
int len=0,n;
while((n=in.read(buf,len,buf.length-len))!=-1)
len+=n;
String text = new String(buf, 0, len);
}catch(Exception e){ System.out.println("testClient Exception="+e); }
}
}.start();
}
}
//-----------------------------------------------------------------------------------------
В обоих случаях было отказано в соединении
java.net.ConnectException: Connection refused: connect | |
|
|
|
|
|
|
|
для: K
(06.06.2009 в 12:39)
| | test | |
|
|
|
|
|
|
|
для: K
(07.06.2009 в 01:11)
| | Вот вы сами же пишите человеческое, а значит понимаете суть процесса, и в то же время несете невообразимое. Сервер не браузеру посылает пакеты свои, эти пакеты в фоновом режиме принимаются модемом и аккуратно помещаются в буфер, и любое заинтересованное приложение может их получить. Но для этого оно само должно следить за буфером, реагировать на его заполение и считывать. Сам же буфер не заставит браузер обратиться к нему. | |
|
|
|
|
|
|
|
для: K
(07.06.2009 в 01:11)
| | А вот ещё идея...
по образу и подобию автозапуска дисков (например CHIP-DVD) когда вставляете диск в привод запускается браузер с нужной страницей.
локальным вебсервером Вы принимаете данные формируете страницу и скармливаете её системе (правда придётся разрешить это делать серверу)
можно даже с этой страницы общаться с сервером инициатором напрямую, по средствам Аякса в течении допустим нескольких минут для приёма ещё каких нибудь данных | |
|
|
|
|
|
|
|
для: K
(07.06.2009 в 01:11)
| | достукивайтесь браузером до локального сервера с нужной Вам частотой
а локальным сервером "ловите" откуда угодно то что нужно | |
|
|
|
|
|
|
|
для: PAT
(06.06.2009 в 23:16)
| | Кстати, провел эксперимент. Запустил локальный сервер (т.е. все происходило на одном и том же компьютере), в нем считал при первом обращении локального клиента его адрес (127.0.0.1:80) , запустил независимый процесс, который, выждав 1 минуту, послал клиенту сообщение. На Java выглядело так
Socket s=new Socket(ip.getHostName(),ip.getPort());
String msg="<script>alert('!!!!!')</script>";
s.getOutputStream().write(msg.getBytes());
Ошибок не было выдано, иначе обязательно возникло бы исключение
Браузер FireFox молчит как партизан
Попытался после этого куска вставить считывание ответа от клиента (браузера)
byte buf[] = new byte[64*1024];
int n= s.getInputStream().read(buf);
Ничего не считывается, после небольшого таймаута возвращается -1
Как достучаться до браузера (чтобы он хоть как-то прореагировал) ума не приложу. | |
|
|
|
|
|
|
|
для: K
(06.06.2009 в 22:44)
| | Дело не в модеме, дело в провайдере, о чём я вам уже писал ранее, а вы не поняли.
У меня тоже ADSL-модем. | |
|
|
|
|
|
|
|
для: PAT
(06.06.2009 в 21:14)
| | Странно, зашел на http://2ip.ru/ несколько раз, и все время один и тот же адрес
Может, потому что у меня ADSL-модем? | |
|
|
|
|
|
|
|
для: K
(06.06.2009 в 16:38)
| | >"Новый IP назначается для каждой новой сессии?"
Нет. Сессии, ИМХО, тут вовсе не причём.
Я не специалист по TSP/IP-технологиям, потому могу говорить только о своих визуальных наблюдениях.
Например, если я зайду на страницу http://2ip.ru/, меня там определят как 123.45.67.890
При каждом обновлении этой страницы (хоть при ежесекундном) я буду видеть свой новый IP. И он
практически всякий раз будет иным. Разумеется - в пределах диапазона адресов моего провайдера.
Вот данные за последние пять нажатий на кнопку "Обновить" браузера (последняя группа IP-адреса):
ххх.ххх.хх.202
ххх.ххх.хх.204
ххх.ххх.хх.219
ххх.ххх.хх.251
ххх.ххх.хх.209
|
| |
|
|
|
|