Communication client-client sans serveur?

Je suis nouveau dans la programmation socket et j’ai besoin de clarifier certaines choses.

Avez-vous besoin d’un serveur entre deux communications client? Laissez-moi vous expliquer ce que je veux dire:

Exemple 1:

  1. Client1: Serveur, je veux parler avec un client2
  2. Serveur: pas de problème. Attendons qu’il envoie la demande de connexion
  3. Client2: Je suis ici. Je veux parler avec le client1.
  4. Serveur: OK Client1 est l’adresse IP du client2. Et pour vous Client2, voici

Adresse IP du client1. Vous pouvez maintenant vous parler sans moi.

Exemple 2:

  1. Client1: Serveur, veuillez envoyer un message au client2: “Hey client2. Comment allez-vous?”
  2. Serveur: D’accord, pas de problème. Envoi du message au client2
  3. Client2: Merci au serveur pour l’envoi du message client1. Lui envoyer une réponse: “Hey, je vais bien.”
  4. Serveur: Envoi du message au client1.

Ma question est donc la suivante: avez-vous besoin d’un serveur après avoir rencontré deux clients pour communiquer entre eux? Ou je suis sur une mauvaise piste?

MODIFIER:

Le but de ceci est que je veux développer mon jeu mobile très simple pour devenir un multijoueur. Par exemple, je souhaite afficher PACMAN2 sur un téléphone mobile PACMAN1 et inversement.

Avoir les deux applications clientes pourrait théoriquement communiquer directement et cela pourrait fonctionner dans un LAN mais en pratique, cela est peu probable. La principale raison pour laquelle cela ne fonctionnera pas est que dans de nombreux cas, l’adresse IP du client 1 / client 2 que le serveur “voit” est en fait l’adresse IP de la passerelle réseau pour le client 1 / client 2. une connexion au client 2. Vous pouvez également avoir le pare-feu sur la machine client 2 (ou son réseau) bloquant la connexion initiée à partir du client 1.

Vous pourriez trouver des informations utiles si vous lisez plus sur XMPP.

Pour répondre à la question posée par Kevin Kal, vous n’avez pas nécessairement besoin d’un serveur pour Client1 et Client2 . Si vous utilisez le serveur dans votre exemple pour envoyer les données nécessaires (IP et port) à Client1 , Client1 peut se connecter à Client2 via un socket que Client2 écoute (et comme dit Kevin, cela fait de Client2 un serveur à proprement parler).

Si vous voulez en savoir plus sur les connexions client-client dans Java, voici une très bonne réponse à une question similaire:

Connecter deux sockets client

Si vous utilisez une programmation de socket TCP, vous avez besoin d’un serveur central pour faciliter la communication entre les clients.

Raison – Vous ne pouvez pas vous connecter à un port sur un client à partir de tous les autres clients. Tous les clients peuvent se connecter à un serveur sur un port particulier et le serveur peut faciliter la communication entre les clients.

Si vous vous éloignez de la programmation par socket et utilisez des fonctionnalités avancées comme la messagerie; La communication entre pairs et la diffusion de messages à plusieurs clients peuvent être réalisées.

MODIFIER:

Je préfère toujours TCP sur UDP pour ces raisons, en particulier la fiabilité

Dans votre cas des jeux multi-joueurs, vos clients doivent toujours être connectés au serveur sur un socket dédié. Comme vous devez quand même utiliser TCP, le serveur peut prendre en charge l’envoi de messages entre les clients avec l’ID client.