2010-10-29 2 views
1

Я собираюсь создать клиент-серверное приложение. Клиент - это iPad (или Android-планшет). Сервер - обычный ПК. И клиенты, и сервер подключены к одной сети (используя WiFi).Tablet (iPad/Android) -Server Communication Protocol

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

Спасибо

+0

Re этот очень старый вопрос. С 2015 года вы просто используете «BAAS» (gamesparks, parse, что-то в этом роде). – Fattie

ответ

6

Ответ зависит от того, что вы определяете на «сервер», «клиент» и «протокол».

Технически ответ «да»; с практической точки зрения каркас, который вы ищете, называется «сокет», но в отношении протокола все может усложниться.

Протокол представляет собой структуру синтаксиса, управляющую обменом данными, то есть набор правил, которые вы используете для запроса/предоставления услуги (см. the IETF website для списка стандартных). Сокеты, с другой стороны, предоставляют вам только канал связи для передачи байтов с одной стороны на другую и, помимо всего прочего, вам необходимо реализовать протокол. Хорошей новостью является то, что сокет не зависит от языка, и вы можете отправлять сообщения между гетерогенными устройствами (ipad/android/linux/windows).

Использование сокетов в Java легко (я делаю это очень короткий здесь)

стороне сервера

ServerSocket ss = new ServerSocket(port); 
Socket s = ss.accept(); 
InputStream is = s.getInputStream(); 

стороне клиента

Socket s = new Socket("server.address", port); // same port as above 
OutputStream os = s.getOutputStream(); 

Когда вы пишете что-то с помощью os.write() те же байты будут считаться is.read(). Вы пишете на os - это реализация вашего протокола.

Эта тема полностью освещена в статье «Мышление в Enterprise java» Брюса Эккеля, вы можете access the digital edition бесплатно. В C/C++/Objective C вещи сложнее, но вы можете легко использовать Google для учебных пособий.

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

Если, как в стандартном подходе, компьютер играет роль сервера и клиенты хотят получать информацию из него, вы можете рассмотреть возможность установки (очень) легкий веб-сервер и доступ к данным с использованием HttpURLConnection. Это оболочка для сокета с управлением протоколом HTTP, уже реализованным. Остерегайтесь, это для Java; для C/C++ нет «стандартного рамочного эквивалента», я честно понятия не имею о цели C.

Пожалуйста, будь также знать следующее:

  • Если клиент и сервера имеют различные архитектуры двоичного обмен данными может получить болезненный, лучше определить свой протокол как последовательность строк (например, SMTP) и кодирования/декодирования двоичные файлы, использующие base64 или какой-либо другой метод, который вы, возможно, захотите реализовать
  • Чтобы связать два сокета, клиент должен знать IP-адрес сервера; если вы используете DHCP в своей сети WIFi, вам также необходимо реализовать фазу обнаружения для вашей службы.

В качестве последнего примечания стороны: «клиент» и «сервер» - это просто ярлыки, которые вы добавляете к связанным объектам в зависимости от который запрашивает услугу/информацию (клиент) и кто ее предоставляет (сервер). Связь на самом деле симметрична, и вы можете использовать те же структуры/функции/код на обеих конечных точках.

+0

Спасибо Dario за хороший ответ – fouad