Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > Клиент (апплет) не может соеденится с сервером


Автор: polakwilno 16.8.2007, 17:48
Добрый день,

Столкнулся с такой проблемой, и на 99% уверен, что виноваты настройки винды или ИЕ, так как раньше все работало...

В общем есть клиент-сервер приложение (ява апплет - ява). Все просто, на сервере выполняю

Код

serverSocket = new ServerSocket(7000);


на стороне клиента (это ява апплет)

Код

    принт(1);
    clientSocket = new Socket(ИП, 7000);
    принт(2);


Почемуто клиент на находит сервера (1 выводится, а 2 - нет. Застревает на clientSocket = new Socket(ИП, 7000);)

Почему уверен что виноваты настройки? Потомучто клиент на С++ этот сервер находит.

Подскажите как решить эту проблему... 
ОС: виста
Браусер: ИЕ 7

Пробовал отключать антивирус, файрвол и настройки безопасности в ИЕ ставил на минимум - эффект тотже...


П.С. Вариант что введен неправильный ИП отпадает smile


Автор: LSD 16.8.2007, 18:03
Цитата(polakwilno @  16.8.2007,  18:48 Найти цитируемый пост)
Почемуто клиент на находит сервера (1 выводится, а 2 - нет. Застревает на clientSocket = new Socket(ИП, 7000);)

1. как минимум после пары минут, ты должен получить в консоль ошибку SocketTimeoutException.
2. апплет может устанавливать соединение, только с сервером с которого был загружен.

Автор: polakwilno 16.8.2007, 18:13
1. Пробовал дописать SocketTimeoutException но получил ошибку, что таймаут обрабатывается уже установленным  "catch (IOException e)", но никакой ошибки я не получаю. Раньше этот эксепшн срабатывал, когда сервер был выключен... Теперь ничего не происходит... Пробовал писать ИП на угад - тоже никакого сообщения....

2. Т.е. если я запускаю сервер со своего компа с внешним ИП х, аплет загружаю тоже со своего компа, то все должно работать??

Автор: LSD 16.8.2007, 18:27
Цитата(polakwilno @  16.8.2007,  19:13 Найти цитируемый пост)
Раньше этот эксепшн срабатывал, когда сервер был выключен... Теперь ничего не происходит... Пробовал писать ИП на угад - тоже никакого сообщения....

Напиши тест:
Код

Socket socket = new Socket(ИП, 7000);
socket.close();

и посмотри заработает ли он.

Цитата(polakwilno @  16.8.2007,  19:13 Найти цитируемый пост)
Т.е. если я запускаю сервер со своего компа с внешним ИП х, аплет загружаю тоже со своего компа, то все должно работать??

Да, но только он должен коннектится строго по тому IP по которому был скачан (на тот случай если у тебя несколько сетевых интерфейсов).

P.S. А ты уверен, что у тебя нигде "молча" не перехватывается исключение?

Автор: polakwilno 16.8.2007, 18:53
Кто такие сетевые интерфейсы? smile Это зависит от меня или от моего провайдера? Как это проверить?

Тестил такой код:

Код

public boolean connectToServer(){
        new Thread(){
            public void run(){
                try {
                 input.setText(input.getText() + "Connecting to " + hostname + ":" + port + "\n");
                 clientSocket = new Socket(hostname, port);
                 clientSocket.close();
                 input.setText(input.getText() + "Connection closed");
                } catch (UnknownHostException e) {
                    input.setText(input.getText() + "Неправильный адрес\n" + e.getMessage());
                    setError(e.getMessage());
                } catch (IOException e) {
                    input.setText(input.getText() + "Сервер оффлайн.\n" + e.getMessage());
                    setError(e.getMessage());
                }
                
                input.setText(input.getText() + "ххххх\n");
            }
        }.start();
        return true;
    }



И получил такой вывод:

Connecting to ИП:7000

И все....


А как еще может перехватыватся исключение? Это единственный try блок во всем коде...

Добавлено через 12 минут и 15 секунд
О, в низу есть консолька явы, там вот какая ошибка:

Exception in thread "Thread-271" java.security.AccessControlException: access denied (java.net.SocketPermission ИП:7000 connect,resolve)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkConnect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at Client200708161902$1.run(Client200708161902.java:139)



Почему access denied?

Автор: polakwilno 16.8.2007, 19:20
Вроде нашел причину на одном форуме:

Цитата

Up to 1.5 works fine (We use a certificate and hostname manager to accept all).
Did the upgrade to 1.5.01 and now we get the following:


Действительно, вроде раньше у мну была версия постарее, теперь 1,6

Совет как исправить:

Цитата

You Have two options. one is to sign the applet and second is to change the java.policy file of the user in jre/ext/security directory.


Нашел инфу, буду учится подписывать апплет smile Надеюсь поможет, потом напишу о результате smile

Автор: polakwilno 17.8.2007, 17:27
:(

сделал все как написано тут: http://www.ericsson.com/mobilityworld/sub/open/technologies/open_development_tips/docs/odt_sign_applets


И тоже самое:

Exception in thread "Thread-8" java.security.AccessControlException: access denied (java.net.SocketPermission ИП:7000 connect,resolve)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkConnect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at Client200708171628$1.run(Client200708171628.java:139)


Как с этим бороться? :(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)