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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клиент - сервер 
V
    Опции темы
Samotnik
Дата 1.10.2007, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Нуно написать прогу, "Клиент - сервер" с  ипользованием БД. Значицца JDBC знаю хорошо (с этим проблем не будет). Но вот проблема с "клиент - сервером", не понимаю, как следует организовать работу.  Нуно сделать что то типа: Клиент (имеет GUI  интерфейс) посылает запрос на сервер, тот в сою очередь берет данные из БД и отсылает назад. Ток как это реализовать - понятия не имею!!!
Хотелось бы чтоб подсказали, каким образом, серверу (кот берет данные из БД) передать эти данные клиенту, и отобразить в красивой Свинговской таблице?!?!?!?  smile 
Если не сложно, выложите плз пример кода, кот демонстрирует, простейший обмен между клиентом и сервером в GUI интерфейсе !!!
PM MAIL   Вверх
nornad
Дата 2.10.2007, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



У тебя простая клиент-серверная модель? Тогда всё просто. Клиентская часть всё рисует и даёт изменять, а данные берёт и кладёт через обращение к серверу. Серверная часть тупо сидит и ждёт, чего ей прикажут. Приказали выдать некие данные - лезет в БД и выдаёт. Приказали записать - пишет.
Общение между двумя частями реализовать можно по-разному. Тут тебе и сокеты, и пайпы, и флопинет, и соап, и много чего ещё можно придумать. Даже тупо через работу с файлом можно реализовать. smile
Выбор обычно либо заранее определяется требованиями заказчика, либо производится исходя из имеющихся возможностей и знаний.

Добавлено через 1 минуту и 14 секунд
Инициатор общения в 99% - клиент (изредка требуется реализовать возможность синхронизации неких кешируемых данных на различных клиентах - тогда инициатором выступает сервер).


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Samotnik
Дата 2.10.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Цитата(nornad @  2.10.2007,  02:25 Найти цитируемый пост)
 Тут тебе и сокеты

А на этом если можно по-подробнее  .
Я се так представляю: Сервер берет данные из базы, записывает в одну переменную (с разделителями), пересылает на клиент, тот в свою очередь через StringTokenizer разделяет  обратно и записывает в JTable .    Так??  Иль схема иная???
PM MAIL   Вверх
nornad
Дата 2.10.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



С сокетами я ни разу не работал, поэтому ничего про них не скажу.
А вот по поводу пересылки - да, приведённый тобою вариант является одним из возможных. Я бы только все значения сначала прогнал через base64, чтобы в них не встречалось тех же разделителей и других потенциально опасных символов.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Samotnik
Дата 2.10.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Цитата(nornad @  2.10.2007,  11:39 Найти цитируемый пост)
тобы в них не встречалось тех же разделителей и других потенциально опасных символов.

База будет простенькая  (4 сущности, и 1 с экономическими расчетами), поэтому, разделителей там не будет, это я "вручную" проматрю.

Цитата(nornad @  2.10.2007,  11:39 Найти цитируемый пост)
С сокетами я ни разу не работал, поэтому ничего про них не скажу.А вот по поводу пересылки - да

 smile    Пасибо и на этом!!!!
PM MAIL   Вверх
_Michael
Дата 2.10.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



так там нет ничего сложного с сокетами. на сервере создаеш ServerSocket. а на клиенте просто Socket и все. Вот куски кода клиента. уже их повставляеш куда надо и как будет угодно
Код

int port = 3339; //порт на котором у тебя сервер работать будет
            InetAddress addr = InetAddress.getByName(host); //имя хоста куда хочешь конектиться т-е где сервер запущен
            Socket sock = new Socket(addr, port);
            InputStream in = this.sock.getInputStream();
            OutputStream out = this.sock.getOutputStream();
 Вот ети InputStream и OutputStream используеш соответственно для чтения и записи в сокет что означает получения ответа сервера (чтение) и запрос серверу(запись). там где то в потоке окремом пишешь что-то наподобе
Код

//ето все упрощено конечно.
while (true) {
.....
int available = sock.getInputStream.available();
byte[] data = sock.getInputStream.read(available);
....
}

аналогично используеш out  для записи в сокет.
С серверСокетом думаю проблем не будет. аналогично как с клиентским, только хоста не надо указывать, просто
Код

 ServerSocket ss = new ServerSocket(3339); 
точно не помню. както так smile

Это сообщение отредактировал(а) _Michael - 2.10.2007, 21:28


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
Samotnik
Дата 3.10.2007, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



А с многопоточностью, как быть? (Много клиентов типа должно быть !)
PM MAIL   Вверх
_Michael
Дата 3.10.2007, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну ето не знаю. ты сначала реализуй для одного клиента чтоб работало корректно. А потом запусти два или три клиента одновременно посмотри что будет. и уже потом будем разбираться. smile. Не все сразу smile


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
Maverick
Дата 3.10.2007, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

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



а на фига это все вручную писать? 21 век на дворе... существуют веб-сервера, сервлет- ежб- контейнеры... ?? зачем писать все на таком низком уровне???


--------------------
smile
PM ICQ GTalk   Вверх
Samotnik
Дата 3.10.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Цитата(Maverick @  3.10.2007,  12:37 Найти цитируемый пост)
а на фига это все вручную писать? 21 век на дворе... существуют веб-сервера, сервлет- ежб- контейнеры... ?? зачем писать все на таком низком уровне???

Потому что задание такое!!!    smile 
PM MAIL   Вверх
_Michael
Дата 3.10.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



smile потому что так интересней, и дает более глубокое понимае как работают ети высокоуровневые технологии


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
v2v
Дата 3.10.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



всё просто. недавно такое же задание делал )))
значиццо так:
заходишь в Ява Альманах и смотришь 4 примера: 
1) http://www.exampledepot.com/egs/java.net/C...rverSocket.html
2) http://www.exampledepot.com/egs/java.net/C...cket.html?l=rel
3) http://www.exampledepot.com/egs/java.net/R...cket.html?l=rel
4) http://www.exampledepot.com/egs/java.net/W...cket.html?l=rel
Многопоточность тебе надо будет делать в примере 1.
Вот так: 
Код

    try {
        int port = 2000;
        ServerSocket srv = new ServerSocket(port);
    
        // Wait for connection from client.
        WORKWITHKLIENT(srv.accept()); // -------- вот тут для каждого сокета создаешь отдельный поток!!!
    } catch (IOException e) {
    }


В функции WORKWITHKLIENT реализовываешь примеры 3 и 4. Вот и всё))



--------------------
PM   Вверх
_Michael
Дата 3.10.2007, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



v2v, отличный пример smile 


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
v2v
  Дата 3.10.2007, 21:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



_Michael,  это можно отмечать в репутации  smile 



--------------------
PM   Вверх
jsse
Дата 7.10.2007, 23:41 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 99
Регистрация: 1.5.2006
Где: Кривой Рог

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



Можно сделать client-server на apache xmlrpc, многопоточность, простота использования. Но простота жертвуется производительностью, т.к. для отправки запроса и получения ответа формируется xml документ который занимает 80% ответа. При небольшом объеме обмена данных и скоростном соединении это не ощущается.

Работает просто - клиент вызывает ф-цию на сервере и получает ответ.

// SERVER
Код

// SERVER
          WebServer webServer = new WebServer(port);
        
          XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();
          PropertyHandlerMapping phm = new PropertyHandlerMapping();

// Класс у которого будут вызывать ф-ции
          Calculator = org.apache.xmlrpc.demo.Calculator org.apache.xmlrpc.demo.proxy.Adder=org.apache.xmlrpc.demo.proxy.AdderImpl
          phm.addHandler("Calculator", org.apache.xmlrpc.demo.Calculator.class);

          xmlRpcServer.setHandlerMapping(phm);

          XmlRpcServerConfigImpl serverConfig =
              (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
          serverConfig.setEnabledForExtensions(true);
          serverConfig.setContentLengthOptional(false);

          webServer.start();


Код

//CLIENT
          XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
          config.setServerURL(new URL("http://127.0.0.1:8080/xmlrpc"));
          config.setEnabledForExtensions(true);  
          config.setConnectionTimeout(60 * 1000);
          config.setReplyTimeout(60 * 1000);
          XmlRpcClient client = new XmlRpcClient();
          client.setTransportFactory(new XmlRpcCommonsTransportFactory(client));
          client.setConfig(config);
          Object[] params = new Object[] { new Integer(2), new Integer(3) };
// Вызов ф-ции у сервера
          Integer result = (Integer) client.execute("Calculator.add", params);
          System.out.println("2 + 3 = " + result);


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

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

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


 




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


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

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