2011-10-12 1 views
4


Je travaille sur un projet de messagerie instantanée P2P, comme ichat, mais juste pour LAN.
J'utilise la bibliothèque jmdns pour la découverte de services, et je teste avec pidgin et je me connecte en tant qu'utilisateur Bonjour. comme jusqu'ici, le service _presence._tcp.local. est bien découvert,
alors nous connaissons les informations de l'utilisateur dans le réseau local comme nom @ hôte: port, alors comment démarrer une conversation avec le client Bonjour?
J'ai regardé dans XMPP, mais il ne supporte pas P2P, mais je peux difficilement trouver la bibliothèque pour le jingle d'extension qui supporte P2P.
peut-être que je devrais utiliser SIP pour faire une conversation? mais le format de paquet est compatible avec Bonjour? ou je dois étudier la structure du paquet échangé?
Quelqu'un peut-il expliquer un peu comment fonctionne ichat pour LAN?
Merci beaucoup pour votre aimable aide!
comment démarrer une conversation avec client bonjour connaissant son nom @hôte: port?

Répondre

4

Je pense que vous êtes un peu confus.

Bonjour est un mécanisme pour trouver un service. Ce n'est pas pour communiquer avec un service. Une fois que vous avez trouvé l'information name @ host: port, vous avez terminé avec Bonjour.

L'étape suivante exigera que vous parliez un protocole que le service comprend. Le jeton _presence dans la chaîne de service indique qu'il s'agit d'un service XMPP. Vous aurez besoin de parler de XMPP. Vous ne pouvez pas parler de SIP. Avez-vous essayé d'ouvrir une connexion XMPP à l'hôte et au port que vous avez trouvés?

Vous parlez de SIP et de Jingle. Ceux-ci sont utilisés pour configurer un appel audio ou vidéo. Si vous écrivez un programme de messagerie instantanée, vous n'avez pas besoin de le faire. XMPP seul est suffisant.

Si vous souhaitez prendre en charge l'audio ou la vidéo, vous aurez besoin de l'un de ces protocoles. Parce que le service que vous avez trouvé est un service XMPP, vous devrez utiliser Jingle. Si vous n'avez pas de bibliothèque qui parle Jingle, vous devrez écrire le code vous-même. Il n'y a rien dans les informations Bonjour qui identifie un service SIP, donc vous ne pouvez pas utiliser SIP - sauf si vous pouvez faire une requête Bonjour différente et trouver un service SIP.

Je déduis que vous travaillez en Java. La bibliothèque XMPP la plus populaire pour Java semble être Smack.

+0

vous avez dit l'ouverture d'une connexion XMPP, ouais, c'est le problème que je me pose! Comment ? avec une connexion socket ou une bibliothèque appropriée qui ne me soucie pas du format du paquet? Merci pour votre réponse! – seaguest

+0

Oh, c'est vrai. J'ai ajouté un lien vers une bibliothèque appelée Smack qui devrait vous aider. –

+1

merci, mais en fait j'ai regardé en claquant, je sais que nous pouvons commencer une conversation avec les autres avec l'aide d'un serveur. mais maintenant je n'ai pas de serveur, c'est p2p, alors peut-on faire ce travail sans serveur? – seaguest

0

Vous pouvez utiliser SIP pour cela. MDNS sera votre mécanisme de découverte, alors vous utiliserez le SIP simple pour appeler, celui que vous avez appris l'URI que vous souhaitez appeler.

SIPSIMPLE SDK (http://sipsimpleclient.com) implémente cette fonctionnalité en chantant ce brouillon expiré: http://tools.ietf.org/html/draft-lee-sip-dns-sd-uri-03 cela pourrait être un bon début.

Fondamentalement, votre client générerait un URI comme sip: random_stuff @ ip: port, puis le publier avec un nom d'affichage en utilisant MDNS. L'application parcourt également MDNS pour les pairs sur le LAN: _sipuri._udp par exemple. Une fois que vous obtenez un URI, vous pouvez simplement composer en utilisant SIP.

2

Merci pour l'attention de tout le monde, maintenant j'ai trouvé quelque chose. XMPP ne prend pas en charge le mode P2P, prend uniquement en charge les clients clients-serveur. mais il existe une autre norme "XEP-0174: Messagerie sans serveur" qui convient au chat p2p dans un réseau local. DNS-SD + XEP-0174, ichat fonctionne de cette façon.
comme j'ai utilisé la bibliothèque smack, il ne supporte pas p2P; mais quelqu'un a fait quelques changements, voici le lien http://issues.igniterealtime.org/browse/SMACK-262.
Je n'ai pas essayé cette connexion XMPPLLConnection, j'ai regardé dans le code source de smack, il est basé sur la connexion socket. malheureusement, il n'y a pas de bibliothèque Java pour XEP-1074, donc je dois travailler sur le flux xml sur socket.

Questions connexes