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

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

25.11.2007, 14:18. Показов 3959. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru