Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/100: Рейтинг темы: голосов - 100, средняя оценка - 4.69
3 / 3 / 3
Регистрация: 23.09.2013
Сообщений: 48

Написание клиент-серверного приложения

29.01.2014, 20:04. Показов 18437. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени дня! Передо мной встала задача разработки клиент-серверного приложения под андроид. До этого писал только дэсктоп и поэтому мало знаком с соответствующими технологиями.


Вопросы:
Как и где найти подходящий сервер?
Как написать API для него (подразумевается обмен локальной БД с БД сервера и авторизация)?
Как работает регистрация и авторизация на сервере?
Как отправлять с сервера данные в приложение?

И еще: ищу ментора по данной тематике, очень интересно и актуально сейчас для меня.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.01.2014, 20:04
Ответы с готовыми решениями:

Архитектура клиент серверного приложения
Добрый день. Возникла идея проекта, но как реализовать его я не представляю. Есть клиентское андроид приложение, в котором присутствует...

Архитектура клиент-серверного приложения с off-line режимом
Доброго дня. Столкнулся со следующим вопросом на тестировании: Создаётся Android-приложение, работающее с данными на сервере. В...

Нужен прокомментированный код простого клиент-серверного приложения
Народ, я буду очень благодарен за помощь. Только начал изучать Java в рамках мобильных приложений и после изучения элементарных вещей зашел...

5
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
29.01.2014, 21:29
Присоединяюсь к вопросу. Тоже интересно!

Лично я бы написал на PHP примитивную прослойку/регистрацию, авторизация через ключ в строке URL, там-же параметры для запроса к базе... Назад в андроид возвращал бы текстовик с ответом, возможно даже в zip-файле. Но это для одноразовых и главное редких и больших запросов (например на глобальное обновление баз) или мелких "подтверждений заказов". Но если хочется "подключиться", поработать в базе клиентов пока онлайн и отключиться - нужен другой, "правильный" метод...

Слышал что для этого есть библиотеки для подключения к MySQL...
0
3 / 3 / 3
Регистрация: 23.09.2013
Сообщений: 48
30.01.2014, 14:27  [ТС]
фишка то вот в чем, если это просто сайт был бы, то там все понятно, типичная авторизация через кукиз. Но на мобильном телефоне вместо кукиз должен использоваться похожий механизм, вроде какого нибудь токена в приложении, который бы указывал, что пользователь авторизирован. Я хочу узнать, есть ли какой то унифицированный метод решения этой проблемы или каждый по своему решает. Если что найдешь(найдете) прошу отписаться, пока я решаю проблему через RPC на сервере, просто вызов скрипта
SQL
1
2
3
SELECT *
FROM TABLE
WHERE login LIKE "" AND password LIKE ""
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
30.01.2014, 18:07
Чисто теоретически... если получится полностью авторизироваться на сервере, то можно раз в секунду получать микространицу (например на PHP) "авторизирован ли я" с текстовой начинкой "1" или "0"... И от него зажигать/гасить индикатор "Online"... но это не прямое общение с базой!
0
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
30.01.2014, 19:09
Лучший ответ Сообщение было отмечено ChristmasSocks как решение

Решение

ChristmasSocks, Tester64,
вроде тут ничего сложного нет.

Есть две стороны: сервер и клиент.
Сначала стоит определиться с платформой. Это может быть сервер на базе php, c# asp.net/mvc, java, node.js и так далее.

В самом-самом вкратце, вебсервер получает запрос. С помощью раутинга определяем метод, который будет получать этот запрос. За раутинг в разных технологиях отвечают разные механизмы, так в spring mvc java это servlet dispatcher, в node.js это (как правило) express модуль, для c# asp.mvc это global routes и так далее.

Скоп этих ваших методов и будут представлять собой API.

Часть клиента - как хотите. Делаем запрос на сервер по определённому endpoint'у, получаем ответ. Всё.

Вы спрашиваете про авторизацию. Для авторизации обычно используется token. Ключ, по которому веб сервер будет определять кто мы и как нас зовут. Токен будем слать в header.

Но давайте посмотрим это на практике. Я буду использовать node.js express:
WebStorm нагенерил сразу шаблон, покажу самое важное.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
 
var app = express();
app.set('port', process.env.PORT || 3002);
 
//Отправка get-запроса получаем index.
app.get('/', routes.index);
//Отправка get-запроса /users получаем юзеров
app.get('/users', user.list);
 
//Запускаем сервер
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Теперь обработчики запросов:
routes/index.js

JavaScript
1
2
3
exports.index = function(req, res){
  res.send('Hello, world');
};
routes/users.js

JavaScript
1
2
3
exports.list = function(req, res){
  res.send("respond with a resource");
};
Запуск, проверка -
вывод>curl 127.0.0.1:3002
Hello, world


конец поста №1

Добавлено через 15 минут
Клиент:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class HttpClientFactory {
 
    private static DefaultHttpClient client;
 
    public synchronized static DefaultHttpClient getThreadSafeClient() {
  
        if (client != null)
            return client;
         
        client = new DefaultHttpClient();
        
        ClientConnectionManager mgr = client.getConnectionManager();
        
        HttpParams params = client.getParams();
        client = new DefaultHttpClient(
        new ThreadSafeClientConnManager(params,
            mgr.getSchemeRegistry()), params);
  
        return client;
    } 
}
Есть доступ к Http соединению. Запросы:

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
public class ServerRequestWorker {
 
    public void index() {
        try {
            JSONObject jsonObject = commonRequest("http://you_url:3002/index");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
 
    public void users() {
        try {
            JSONObject jsonObject = commonRequest("http://you_url:3002/users");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
 
    }
 
    private JSONObject commonRequest(String url) throws IOException, JSONException {
        HttpClient httpClient = HttpClientFactory.getThreadSafeClient();
        HttpGet httpGet = new HttpGet(url);
        HttpResponse execute = httpClient.execute(httpGet);
        return new JSONObject(EntityUtils.toString(execute.getEntity()));
 
    }
}
Обращаться каждую n-секунду на сервер с таким запрос - зло и антипаттерн.
Успешная авторизация - выдали token, такой хэш-ключ. Пока он есть, ставим его в заголовок и все запросы идут с ним.

Java
1
2
3
4
5
6
7
private JSONObject commonRequest(String url) throws IOException, JSONException {
        HttpClient httpClient = HttpClientFactory.getThreadSafeClient();
        HttpGet httpGet = new HttpGet(url);
        httpGet.setHeader("X-Auth-Token", "Some");
        HttpResponse execute = httpClient.execute(httpGet);
        return new JSONObject(EntityUtils.toString(execute.getEntity()));
    }
Проверяем:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
exports.list = function(req, res){
    var tokenFound = false;
    for(var item in req.headers) {
        if (item == 'x-auth') {
            console.log('Token found ' + item + ": " + req.headers[item]);
            tokenFound = true;
        }
    }
    if (!tokenFound) {
        res.send({code : 0, message : 'Malformed token. Login please'})
    }
  res.send("respond with a resource");
};
1>curl -H X-Auth:cyberForumHash 127.0.0.1:3002/users
respond with a resource


2>curl 127.0.0.1:3002/users
{
"code": 0,
"message": "Malformed token. Login please"
}


Это простейший пример. Для авторизации можно использовать готовые инструменты, типа passport (для js), membership api (для c# asp.net) и так далее.
2
14 / 14 / 5
Регистрация: 08.04.2013
Сообщений: 75
05.06.2014, 09:25
Можно что нибудь такое посмотреть: http://habrahabr.ru/post/151949/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.06.2014, 09:25
Помогаю со студенческими работами здесь

Что использовать для реализации клиент-серверного приложения?
Нужно реализовать клиент-серверное приложение. Принцип работы: Клиент отправляет текстовую информацию на сервер. Сервер обрабатывает и...

Назовите приемущества клиент-серверного Android-приложения, над Web-приложением
Скажите мне вот если вам заказчик скажет, а в чем приемущества андройда, ну например на тем же вебом

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

Написание клиент-серверного приложения в среде Borland c++
Доброго времени суток. Цель: написание клиент-серверного приложения в среде Borland C++ Требования: чтобы сервер мог работать...

Вход в современное программирование с написание клиент-серверного приложения
Здравствуйте, товарищи. Решил я саморазвиваться и для этого требуется совет заядлых программистов. В институте, как и в большинстве...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru