Планшет (iPad / Android) - протокол связи сервера - PullRequest
1 голос
/ 29 октября 2010

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

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

Спасибо

1 Ответ

6 голосов
/ 29 октября 2010

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

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

Протокол - это синтаксическая структура, управляющая обменом данными, то есть набор правил, которые вы используете длязапросить / предоставить услугу (список стандартных номеров см. на веб-сайте IETF ).Сокеты, с другой стороны, предоставляют вам просто канал связи для передачи байтов с одной стороны на другую, и, кроме того, вам необходимо реализовать протокол.Хорошая новость заключается в том, что сокеты не зависят от языка, и вы можете отправлять сообщения между разнородными устройствами (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 , является реализацией вашего протокола.

Эта тема достаточно хорошо (для языка Java) освещена в статье "Thinking in Enterprise java" БрюсаЭкель, вы можете получить доступ к цифровому изданию бесплатно.В C / C ++ / Objective C все сложнее, но вы можете легко найти учебники в Google.

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

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

Пожалуйста, учтите также следующее:

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

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

...