La réponse dépend de ce que vous définissez par « serveur », « client » et « protocole ». Techniquement, la réponse est "oui"; D'un point de vue pratique, le cadre que vous recherchez est appelé «socket», mais en ce qui concerne le protocole, les choses peuvent se compliquer. Un protocole est une structure syntaxique régissant l'échange de données, c'est-à-dire un ensemble de règles que vous utilisez pour demander/fournir un service (voir the IETF website pour une liste de règles standard). D'autre part, les sockets vous fournissent simplement un canal de communication pour amener des octets d'un côté à l'autre et, en plus de cela, vous devez implémenter le protocole. Les bonnes nouvelles sont que socket est indépendant de la langue et vous pouvez envoyer des messages entre des périphériques hétérogènes (ipad/android/linux/windows).
Utilisation des sockets en java est facile (je fais très court ici)
côté serveur
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
InputStream is = s.getInputStream();
côté client
Socket s = new Socket("server.address", port); // same port as above
OutputStream os = s.getOutputStream();
Lorsque vous écrivez quelque chose en utilisant os.write() les mêmes octets seront lus par is.read(). Ce que vous écrivez sur os est la mise en œuvre de votre protocole.
Ce sujet est couvert (pour le langage java) assez bien par "Thinking in Enterprise Java" par Bruce Eckel, vous pouvez gratuitement access the digital edition. En C/C++/Objective C les choses sont plus compliquées mais vous pouvez facilement google pour les tutoriels. Chaque service définit son propre protocole et vous devez décider si l'un d'entre vous le fera ou si vous devez définir le vôtre, en fonction du service que vous souhaitez implémenter entre les deux périphériques.
Si, comme dans l'approche standard, le PC joue le rôle de serveur et les clients veulent récupérer des informations, vous voudrez peut-être envisager d'installer un (très) serveur web léger et accéder aux données en utilisant HttpURLConnection. C'est un wrapper pour un socket avec la gestion de protocole HTTP déjà implémentée. Attention, c'est pour Java; il n'y a pas de "standard cadre équivalent" pour C/C++, je n'ai honnêtement aucune idée de l'objectif C.
S'il vous plaît, soyez aussi au courant de ce qui suit:
- Si le client et les serveurs a différentes architectures d'échange de données binaires peut obtenir douloureux, mieux définir votre protocole comme une séquence de chaînes (comme SMTP) et encode/decode binaires utilisant base64 ou une autre méthode que vous voudrez implémenter
- Afin de lier les deux sockets, le client doit connaître l'adresse IP du serveur; si vous utilisez DHCP sur votre réseau WIFi alors vous devez également mettre en œuvre une phase de découverte pour votre service
Comme dernière note côté: « client » et « serveur » ne sont que vous étiquettes apposées sur les entités communicantes en fonction qui demande un service/information (client) et qui le fournit (serveur). La communication est en réalité symétrique et vous pouvez utiliser les mêmes structures/fonctions/codes sur les deux extrémités.
Re cette très vieille question. A partir de 2015, il vous suffit d'utiliser un "BAAS" (gamesparks, parse, quelque chose comme ça). – Fattie