Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание tcp соединения, кто делал? 
:(
    Опции темы
Alone
Дата 11.6.2003, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 3
Всего: 6



Подкиньте рабочий скелет tcp client
please!


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
Unregistered
Дата 11.6.2003, 06:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











я написал свой java class loader, подскажите, пожалуйста, что нужно сделать, чтобы запускался именно он, а не java.lang.classloader?
[email protected]
  Вверх
Alone
Дата 11.6.2003, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 3
Всего: 6



вообще то это мой топик!!!


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
SVK
Дата 11.6.2003, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 22.5.2003

Репутация: нет
Всего: 1



Не ясно, что за клиент, куда коннектится, что должен делать?
В простейшем варианте cocket-коннекция через tcp/ip можно сделать, например, так:

import java.net.*;
import java.io.*;

...
int port=2345;
Socket socket = new Socket("127.0.0.1", port);
BufferedInputStream is = new BufferedInputStream(socket.getInputStream());
PrintStream os = new PrintStream(socket.getOutputStream());

Возможно много вариантов с "is / os" классами - RTFM.



PM MAIL   Вверх
Alone
Дата 11.6.2003, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 3
Всего: 6



Цитата
Не ясно, что за клиент, куда коннектится, что должен делать?

Клиент tcp, неважно куда коннектится, должен посылать данные в сокет. Должен читать данные из сокета и отдавать на обработку. (я думал это стандартная ситуация...) ладно. Вот кусок кода из программы:
Код
private void callTo( java.lang.String number)
   {
       if(...)
       {
           ...
           try
           {
               makeCall(number);
           }
           catch(Exception e)
           {
               System.out.println(e.getMessage());
               e.printStackTrace();
           }
       }
       else
       {
           ...
       }
       
   }
   
   private void makeCall(java.lang.String number) throws Exception
   {
       int c;
       java.net.Socket s=new java.net.Socket("localhost", 3490);
       java.io.InputStream i=s.getInputStream();
       java.io.OutputStream o=s.getOutputStream();
       while ((c = i.read()) != -1)
       {
           for(int idx=0; idx<number.length();idx++)
           {
               o.write(number.charAt(idx));
           }
           o.flush();
       }
s.close();
   }

после этого имеем :
1. апплет стартовал нормально.
2. ввод данных для передачи в сокет прошел нормально
3. при выполнении makeCall(number) получаем:
Код
access denied (java.net.SocketPermission 127.0.0.1:3490 connect,resolve)
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3490 connect,resolve)
       at java.security.AccessControlContext.checkPermission(AccessControlContext.java:270)
       at java.security.AccessController.checkPermission(AccessController.java:401)
       at java.lang.SecurityManager.checkPermission(SecurityManager.java:542)
       at java.lang.SecurityManager.checkConnect(SecurityManager.java:1044)
       at java.net.Socket.connect(Socket.java:420)
       at java.net.Socket.connect(Socket.java:376)
       at java.net.Socket.<init>(Socket.java:291)
       at java.net.Socket.<init>(Socket.java:119)
       at SG_Control_Panel.makeCall(SG_Control_Panel.java:954)
       at SG_Control_Panel.callTo(SG_Control_Panel.java:931)
       at SG_Control_Panel.callButton1MouseReleased(SG_Control_Panel.java:743)
       at SG_Control_Panel.access$1000(SG_Control_Panel.java:11)
       at SG_Control_Panel$11.mouseReleased(SG_Control_Panel.java:261)
       at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:228)
       at java.awt.Component.processMouseEvent(Component.java:5134)
       at java.awt.Component.processEvent(Component.java:4931)
       at java.awt.Container.processEvent(Container.java:1566)
       at java.awt.Component.dispatchEventImpl(Component.java:3639)
       at java.awt.Container.dispatchEventImpl(Container.java:1623)
       at java.awt.Component.dispatchEvent(Component.java:3480)
       at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450)
       at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)
       at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
       at java.awt.Container.dispatchEventImpl(Container.java:1609)
       at java.awt.Component.dispatchEvent(Component.java:3480)
       at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
       at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
       at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
       at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3490 connect,resolve)
       at java.security.AccessControlContext.checkPermission(AccessControlContext.java:270)
       at java.security.AccessController.checkPermission(AccessController.java:401)
       at java.lang.SecurityManager.checkPermission(SecurityManager.java:542)
       at java.lang.SecurityManager.checkConnect(SecurityManager.java:1044)
       at java.net.Socket.connect(Socket.java:420)
       at java.net.Socket.connect(Socket.java:376)
       at java.net.Socket.<init>(Socket.java:291)
       at java.net.Socket.<init>(Socket.java:119)
       at SG_Control_Panel.makeCall(SG_Control_Panel.java:954)
       at SG_Control_Panel.callTo(SG_Control_Panel.java:931)
       at SG_Control_Panel.callButton1MouseReleased(SG_Control_Paneaccess denied (java.net.SocketPermission 127.0.0.1:3490 connect,resolve)
l.java:743)
       at SG_Control_Panel.access$1000(SG_Control_Panel.java:11)
       at SG_Control_Panel$11.mouseReleased(SG_Control_Panel.java:261)
       at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:228)
       at java.awt.Component.processMouseEvent(Component.java:5134)
       at java.awt.Component.processEvent(Component.java:4931)
       at java.awt.Container.processEvent(Container.java:1566)
       at java.awt.Component.dispatchEventImpl(Component.java:3639)
       at java.awt.Container.dispatchEventImpl(Container.java:1623)
       at java.awt.Component.dispatchEvent(Component.java:3480)
       at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450)
       at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)
       at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
       at java.awt.Container.dispatchEventImpl(Container.java:1609)
       at java.awt.Component.dispatchEvent(Component.java:3480)
       at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
       at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
       at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
       at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)


хотя отдельно взятый пример выполняется нормально.
Код
import java.net.*;
import java.io.*;
class TimeHost {
 public static void main(String args[]) throws Exception {
 int c;
 Socket s = new Socket("localhost",3490);
 InputStream in = s.getInputStream();
 while ((c = in.read()) != -1) {
               o.write(12345);
               o.flush();
 System.out.print( (char) c);
 }
s.close();
}
}


в связи с вышесказанным - HEEElp!!! sad.gif


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
Alone
Дата 11.6.2003, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 3
Всего: 6



Так: частично разобрался.
Если приложение собирать как самостоятельное (с блоком main() ) или располагать код работы с сокетами в пределах коструктора, то все работает.
Но если код расположен дальше конструктора, то запрещено использование компонентов типа java.net.*
Кто подскажет как разрешить их использованиеconfused.gif
Краем мозга понял, что тут замешан SecurityManager, но кто он и с чем его подаватьconfused.gif
Может кто знает? sad.gif((


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
Alone
Дата 11.6.2003, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 3
Всего: 6



Хух! сделал!!! smile.gif
Все дело в том, что из аплета, выполняемого браузером нельзя приконнектиться на localhost. sad.gif
а в экспериментах я именно его и указывал.
Лечится либо правкой файла java.policy (что не есть хорошо) либо не выпендриваться перед SecurityManager и использовать нормальные IP_Addr (not localhost) smile.gif

всем удачи!


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
SVK
Дата 11.6.2003, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 22.5.2003

Репутация: нет
Всего: 1



Все правильно - я когда-то коннектился из апплета к серверу. В т.ч. и к localhost-у.
IP в этом случае можно давать так: 127.0.0.1 (работает и без сети).
PM MAIL   Вверх
Alone
Дата 12.6.2003, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 3
Всего: 6



Фигня получается... sad.gif
мой адр 192.168.10.5
при попытке ломится на localhost - получаю access denied SocketPermission 127.0.0.1:3490
если вместо имени указываю ipaddr интерфейса (192.168.10.5) - все ок.
а при попытке указать другой адр. например 192.168.10.6 - опять получаю access denied...
Где граблиconfused.gif Может все таки кто нить подскажет как использовать java.net.SocketPermission...



--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
SVK
Дата 17.6.2003, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 22.5.2003

Репутация: нет
Всего: 1



Апплет может законнектиться через сокет только на тот хост, с которого он загружен (Codebase). Это сделано по соображениям безопасности.
Т.е. указать какой-то другой ip не получится.

Есть еще trusted апплеты. Наверное, они должны быть подписаны цифровой подписью и как-то прописаны в броузере юзера. Как сделать trusted апплет - не знаю. Не уверен также, что это решит проблему.
PM MAIL   Вверх
Alone
Дата 17.6.2003, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 3
Всего: 6



Исправить положение удалось дописью строки
Код
permission java.net.SocketPermission "*", "connect,resolve,accept,listen";

в файл <PATH_TO_JAVA>/jre/lib/security/java.policy

Цитата
Апплет может законнектиться через сокет только на тот хост, с которого он загружен

Мало верится в такой жесткий подход... Наверняка есть способы делать это. Ну ничего,
"будем искать" (с)Бриллиантовая рука


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
SVK
Дата 18.6.2003, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 22.5.2003

Репутация: нет
Всего: 1



Боюсь, что это поможет только на localhost. В JVM у юзера, загрузившего апплет по сети, ведь ничего не пропишешь.

А насчет "Апплет может законнектиться через сокет только на тот хост, с которого он загружен" - я уверен на 99% - давно не делал апплетов. Надо почитать доку.
PM MAIL   Вверх
Alone
Дата 18.6.2003, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 3
Всего: 6



Хм... В принципе, это меня бы устроило, т.к. апач, субд, и все остальное, будут крутиться на одном серваке.



--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 18.6.2003, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



С политикой все сделано правильно - так SUN и предполагал
делать сам.
А вообще есть еще способ - на сервере, с которого
загружается апплет, запускается демон, который слушает какой-то
порт и рассылает запросы уже сам. И тогда апплет коннектится к
этому демону и демон работает в качестве прокси.
PM MAIL WWW ICQ   Вверх
Alone
Дата 18.6.2003, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 3
Всего: 6



В принципе, так и задумано. Ток этот демоненок не проксей будет, а полноценным сервером.
Будет слушать порт, принимать коннекты клиентов, и по tcp-шному каналу будет обрабатывать их комманды.
Я ж говорю, единственная проблема - если этот демон вдруг будет расположен на другой машинке...


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0727 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.