Ответ зависит от того, что вы определяете на «сервер», «клиент» и «протокол».
Технически ответ «да»; с практической точки зрения каркас, который вы ищете, называется «сокет», но в отношении протокола все может усложниться.
Протокол представляет собой структуру синтаксиса, управляющую обменом данными, то есть набор правил, которые вы используете для запроса/предоставления услуги (см. 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, вам также необходимо реализовать фазу обнаружения для вашей службы.
В качестве последнего примечания стороны: «клиент» и «сервер» - это просто ярлыки, которые вы добавляете к связанным объектам в зависимости от который запрашивает услугу/информацию (клиент) и кто ее предоставляет (сервер). Связь на самом деле симметрична, и вы можете использовать те же структуры/функции/код на обеих конечных точках.
Re этот очень старый вопрос. С 2015 года вы просто используете «BAAS» (gamesparks, parse, что-то в этом роде). – Fattie