Модераторы: 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   Вверх
dotSquid
Дата 3.12.2007, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Юзаю этот apache xmlrpc, но сервер какой-то однозадачный. Если одновременно обращаются два клиента, то обслуживаются они последовательно. Как лечить?
PM MAIL   Вверх
dotSquid
Дата 4.12.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Товарищи, очень прошу помощи. В этой теме разбираюсь плохо, и разбираться в сути времени нет, а нужно скоро сдавать проект.
PM MAIL   Вверх
LSD
Дата 5.12.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Судя по всему xml-rpc поддерживает многопоточность. Твои методы нигде не используют synchronized?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
dotSquid
Дата 5.12.2007, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Убейте меня ржавой консервной банкой, действительно, тупанул с synchronized. Огромное спасибо за то, что открыл глаза
PM MAIL   Вверх
CrasyMen
Дата 25.4.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Samotnik, поделись исходником, плз. Буду премного благодарен. 


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

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

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


 




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


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

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