Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/20: Рейтинг темы: голосов - 20, средняя оценка - 4.55
angel

Сокетное соединение с сервером

25.11.2007, 14:18. Показов 3932. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем идет утренняя планерка, обсуждают что бум дедать в след. неделю....

Все, обговорили, задания распределили, все довольны, все нормально и тут шеф показывает очередное свое творение
( там чего-то графики строит и т.п.), говорит что типа все круто работает, все клиентам нравится, но вот есть мол один косяк - IIS падает.
Ну я спрашиваю а в чем типа дело.
Давай смотреть - IIS-у не хватает памяти.
Давай дальше смотреть, а он, млять из своего апплета, каждые 10 секунд, тянет с сервера XML по 150-200 кило.

Я у него спрашиваю так осторожно, типа кто это писал.
Он ГОРДО, типа он писал.

Я говорю что это не есть оптимальный вариант, что мол у тебя же данные на сервере обновляются не каждые 10 секунд.
И потом говорю ( МЛЯТЬ, ЛУЧШЕ БЫ Я МОЛЧАЛ !!!! ), что типа модные пацаны пишут сокетное соединение с сервером и апплет получает сигнал на обновление только тгда когда это действительно необходимо....

Короче...
2-3 минутное молчание в комнате.

Потом, все говорят - КРУТО!!!!

А потом, шеф смотрит на меня и говорит, ну вот давай и займись этим - мол времени у тебя 7 дней, в след. понедельник
покажи мне, и процитировал млин, 'как модные пацаны в Росии делают это' ( вот знает же гад что я в Яве - НУЛЬ БЕЗ ПАЛОЧКИ !!!! )

Я ему - что типа я только теорию немного знаю и в институте несколько апплетов написал на лабораторных по информатике и все....

А он мне ссылку дает http://java.sun.com

Вот...

В связи с этим у меня к вам, господа вопросы:

1. Возможно мне ЭТО за неделю освоить ? Или лучше подойти и сказать что это слишком сложная задача ?
2. Кто может помочь примерами / ссылками

т.е.
насколько я понимаю, это должно быть два приложения: апплет и сервер.
И сервер по какому-т определенному событию посылает апплету XML файл как текстовую строчку и все.
Или я не прав ?

Заранее спасибо
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2007, 14:18
Ответы с готовыми решениями:

Постоянное сокетное соединение
Доброво времени суток! Есть ли возможность создать постоянное сокетное соединение не используя на стороне сервера такую схему: ...

Сокетное соединение между N компьютерами
Есть два компьютера... =) Первый компьютер делает следующие дела: отправляет свой ip на ftp, соединяется с клиентом и шлёт всякие...

Каким образом через сокетное соединение передать файлы или всю директорию?
Есть одна проблемка. Мне нужно проверять обновления файлов в некоторой директории м в случае обнаружения обновлений копировать её на другой...

22
0 / 1 / 3
Регистрация: 27.03.2012
25.11.2007, 14:33
Такого не делал, поэтому сложно или нет, немогу сказать, но однозначно так часто получать данные из сервера не стоит, потому что насколько я понял обновляются они не часто. Может быть стоит при обновлении БД (как это делается?) формировать этот XML и хранить в виде файла, к которому и обращаться из апплета...
0
angel
25.11.2007, 14:36
То что ты предложил, это один из вариантов.
Обхода решение сокетов, т.е. мы может апплетом проверять наличие определенного файла, который будет являться 'флагом', сигнализирующим о необходимости обновлять инфу...

Но, блин, я заикнулся про сокеты. и теперь жалею об этом.....
0 / 1 / 3
Регистрация: 27.03.2012
25.11.2007, 14:41
Да нет, я имел ввиду полностью сливать необходимые данные в файл и считывать его из апплета, не терроризируя БД...
0
angel
25.11.2007, 14:49
так данные постоянно новые поступают...

Это что-то типа графического представления производственного процесса в режиме реального времени
0 / 1 / 3
Регистрация: 27.03.2012
25.11.2007, 14:59
Даже если они поступают постоянно, то имеет смысл проанализировать - как часто обновляются (неужели раз в 10 сек?) и как сложно их получить (м.б. используются громоздкие селекты с джойнами и группировками?) или вообще - почему падает ваш сервер...
0
angel
25.11.2007, 15:26
угу, данные сыпются со станка с ЧПУ, который передаёт параметры деталюшки, которую он сделал.

А апплет всё это хозяйство преобразует в диаграммы, вот поэтому и рефреш такой дикий.

Но пробрема в чем - что один апплет отображает инфу для кучи станков,
причем один станок может за минуту сделать 100 деталей, а дургой сделает за час одну только.

Вот и получается что для разных чартов надо тянуть инфу с разной переодичностью...

А шас они тупо тянуть для всего всё сразу....
mishgun
25.11.2007, 18:24
>>Модные пацаны делают сокетное соединение апплета с сервером.
Так вот могу сказать что вообще не рекомендуется в целях безопасности соединять апплет напрямую с сервером.
Решение задачи вижу в создании связки-туннеля апплет->сервлет(для которого нужен вебсервер хотя бы Tomcat)которая будет считывать данные их XML сервлетом и потом посылать апплету.
1 / 1 / 1
Регистрация: 18.08.2007
Сообщений: 289
25.11.2007, 20:37
to angel.

Срочно купи книжку 'XML и Java 2. Библиотека программиста (с CD-ROM)', авторы Даконта, Саганич.
(аннотация: http://www.books.ru/shop/books/10868).
0
angel
25.11.2007, 23:50
Да капец, купи книгу срочно...
Во первых я в Берлине, во вторых сроку мне дали неделю, книга хоть как не успеет дойти и осмыслиться ....

Нужен хорошо документированный пример работы подобной штуки.

Спасайте в общем....
1 / 1 / 1
Регистрация: 18.08.2007
Сообщений: 289
26.11.2007, 01:33
Делай так:
1) Java-приложение, выполняющееся на сервере. Оно лезет в базу данных и достаёт данные. Затем формирует из них пакет (можно в одну строку с разделителями; можно просто записывать в выходной поток по порядку все значения, которые потом в том же порядке прочитает клиентский апплет; можно сериализацию использовать, что легче). Открывает ServerSocket и ждёт, пока к нему кто-нибудь обратится. При обращении -- посылает пакет данных. Конечно, для актуальности данных нужно использовать нити (Thread): формировать пакеты данных в реальном времени, а отсылать по мере запросов.

2) Java-аплет, выполняющийся в броузере. Он соединяется с приложением на сервере через сокет (только надо чтобы и апплет бал загружен с той же машины, где крутится приложение). Читает данные от приложения. После разборки строит по ним график.

В сети много есть много on-line книг по сокетам в Java. Поищи.
0
mishgun
26.11.2007, 03:26
а всё-таки почему отказываетесь от идеи сервлета? Или теперь сокет и только сокет? Сервлет ведь и был создан специально для работе на сервере и выводе данных на фронт енд(хтмл,апплет и тд).
1 / 1 / 1
Регистрация: 18.08.2007
Сообщений: 289
26.11.2007, 07:09
1. Для Вас это сложно за 1 неделю;
2. Сервлеты требуют инфраструктуры и настроек на стороне сервера;
3. Попробуйте объяснить шефу о невозможности за такой срок выполнить проект.
0
Genja
26.11.2007, 10:38
Если это делать на ява то сервер всеравно упадет надо делать обновления не через 10 сек вообще чесно говоря ISS для этого не сильно то подходит , а вот совсем другое решение подхода выполнить все это на Borland C++ or Delphi там все намного проще и все это есть в демках и сервер никогда не упадет даже исс и быстро работает и памяти очень мало самое главное кад машинный. Если бы вы были под Unix то тогда понятно да и то есть Kulix пробовал сам очень хорошо работает подключается к любой базе через АДО.
Genja
26.11.2007, 10:46
Да забыл реально показзать при этом результаты за два дня , не все что можно то хорошо и правильно. Делая я приблизительно тоже самое только это были просто XML статические не изменялись так часто но спомощью JavaScript(без графиков) крутитса на компе пользователя долго но зато уверенно, но для этого нужно делать XML file на сервере и большим интервалом обновления. А с Ява только Аплет-Сервлет. Иначе никак. АПросто аплет еще может быть запустится локально, а по удаленной сети то вообще нет смысла.
1 / 1 / 5
Регистрация: 22.07.2007
Сообщений: 366
26.11.2007, 15:29
Я может чего то не понял. Ну ладно там 100-200 кб. качать глупо. Ну а почему нельзя просто соединится с сервером. Посмотреть параметры файла и если они поменялись то его забрать а иначе выйти. А уж сервер сам пусть файл меняет когда ему это надо. В некоторых СУБД например в DB/2 можно встроенные процедуры на Java писать которые будут делать отчёты и тригерится по каким то признакам например AFTER INSERT. Я когда делал сервлет у меня все запросы в течении дня вообще кешировались и при получении повторного запроса с одними параметрами я повторно отсылал старый ответ что бы сервер не грузился.
0
mishgun
27.11.2007, 05:01
Автору
Вот тебе пример работы связки апплет-сервлет через сериализованный Объект если что не понятно будет спрашивай

Апплет
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;
import java.io.*;
 
public class OrderStatusApplet extends Applet{
    boolean isStandalone = false;
    Panel statusPanel = new Panel();
    Panel actionPanel = new Panel();
    GridLayout gridLayout = new GridLayout(1,2);
    Button statusButton = new Button();
    TextField orderTextField = new TextField();
    Label label1 = new Label();
    TextArea statusResultTextArea = new TextArea();
    
    public String getParameter(String key,String def){
        return isStandalone ? System.getProperty(key,def):
          (getParameter(key) != null ? getParameter(key) : def);                      
    }
    
    public OrderStatusApplet(){}
    
    public void init(){
     try {
        jbInit();
      }
     catch(Exception e){
         e.printStackTrace();
     }
    }
    
    public void jbInit() throws Exception{
        this.setSize(400,150);
        this.setLayout(gridLayout);
        statusButton.setLabel('Get Status');
        statusButton.addActionListener(new ButtonHandler());
        label1.setText('Order #');
        orderTextField.setSize(new Dimension(50,19));
        statusResultTextArea.setSize(new Dimension(50,19));
        this.add(actionPanel);
        actionPanel.add(label1);
        actionPanel.add(orderTextField);
        actionPanel.add(statusButton);
        this.add(statusPanel);
        statusPanel.add(statusResultTextArea);
    
    }
    
    public String[][] getParameterInfo(){
        return null;
    }
    
    public void writeOrder(URLConnection conn,Order value){
      try{  
        conn.setUseCaches(false);
        conn.setRequestProperty('CONTENT_TYPE','application/octet-stream');
        conn.setDoInput(true);
        conn.setDoOutput(true);
        ObjectOutputStream os =
                new ObjectOutputStream(conn.getOutputStream());
        System.err.println('Writing Order');
        os.writeObject(value);
        os.flush();
        os.close();
      }
      catch(IOException e){
         System.err.println('Error1' + e.toString());
      }
    
    }
    
    public Order readOrder(URLConnection conn){
    
        Order order = null;
        
       try{ 
        
        ObjectInputStream is = 
                 new ObjectInputStream(conn.getInputStream());
        System.err.println('Waiting for response');
        order = (Order)is.readObject();
        is.close();
       }
       catch(IOException e){
          System.err.println('Error2' + e);
       }
       catch(ClassNotFoundException ce){
          System.err.println('Error3' + ce.getMessage());
       }
      return order; 
    }
    public class ButtonHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
         String s = e.getActionCommand();   
         if(s.equals('Get Status')){    
         try{
            
            Order order = new Order();
            order.setOrder(orderTextField.getText());
            
            URL url = new URL('http://localhost:8100/servlet/OrderStatusServlet');
            System.err.println('Opening connection');
            
            URLConnection conn = url.openConnection();
            
            writeOrder(conn,order);
            
            Order response = readOrder(conn);
            if(response!=null){
             statusResultTextArea.setText(response.getStatus());
            }
            else{
                System.err.println('readObject failed');
            }
        }
        catch(MalformedURLException mue){
            System.err.println('Error4' + mue.getMessage());
        }
        catch(Exception ex){
            System.err.println('Error5' + ex.getMessage());
        }
         
        }
        
        }
    }
}
Засериал
mishgun
27.11.2007, 05:10
Для этого нужен вебсервер попробуй убедить босса что ты имел ввиду сервлеты а не сокеты.И что связывание апплета с сервлетом может быть использовано хаком для доступа на сервер(главная причина почему существует куча запретов аплету на доступ к серверу
mishgun
27.11.2007, 16:35
я извиняюсь я имел ввиду соединение апплета с сервером напрямую.Апплет-сервлет как раз безопасная связка
angel
27.11.2007, 23:48
Уффффффффф
вроде сделал, криво, пока протопит, но принципиально работает :-).

Сервлеты не катят, т.к. из за одного пусть и важного для клиента апплтета, нитко не будет переписывать пол-системы :-).

Кто теперь может проконсультировать по такой проблеме:
Дано: Сервер передает файл апплету.
Надо - во избежание пеергрузки сети, подробить исходный файл сервером( может и не надо, я слышал, что апплет сам умеет тянуть по частям - правда или нет и пример или ссылку если можно)
И есстественно собрать потом файл апплетом из тих самых кусков.

Ваши предложения ????
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2007, 23:48
Помогаю со студенческими работами здесь

Не устанавливается соединение с сервером
Здравствуйте, уважаемые форумчане. Возникла проблема. Есть два приложения. Сервер и клиент написанные на Java через Socket. Порт 5000...

Как закрыть соединение с сервером?
При нажатии на кнопку(Connect), клиент берет записи из JTextField'a и отправляет их на сервер. Сервер печатает их в JTextArea. При первом...

Соединение с SQL сервером используя аутентификацию Windows, а не SQL-сервера
Коннекчусь к SQL-серверу из апплета, используя com.microsoft.jdbc.sqlserver.SQLServerDriver. String...

Соединение с сервером
Установил sql сервер,и собственно возник вопрос ,что делать дальше?как создавать БД и собственно таблицы? в инете видел, что БД создают как...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru