2010-10-27 32 views
2

J'essaie de créer une application Bluetooth qui va simultanément écouter les connexions entrantes (en tant que serveur) et rechercher les connexions disponibles (en tant que client) en utilisant Java et BlueCove. Le principe étant que deux appareils Bluetooth (tels que les téléphones intelligents) peuvent automatiquement se découvrir et commencer une sorte d'échange de fichiers ou d'autres collaborations dès qu'ils se trouvent dans la portée de transmission (ceci est une expérience de mise en réseau opportuniste).Bluetooth agissant simultanément en tant que client/serveur en Java

J'ai un client Bluetooth de base fonctionnant dans son propre thread et un serveur Bluetooth de base fonctionnant dans son propre thread, et j'essaye de les faire fonctionner en même temps. Cela a été à moitié réussi, mais pour une raison quelconque, un périphérique finit toujours par recevoir des connexions entrantes et ne trouve jamais d'autres périphériques, et un périphérique finit par trouver d'autres connexions, mais ne les reçoit jamais (les deux machines fonctionnent avec le même code dongles - une machine sous Windows XP et l'autre sous Windows 7). J'ai seulement essayé ceci avec deux dispositifs jusqu'ici.

Je reçois des exceptions, telles que:

"java.io.IOException: Impossible d'interroger appareil distant"

« java.io.IOException: Nom d'erreur de recherche; [10108] Non ce service est connu, le service est introuvable dans l'espace de nommage spécifié. "

"Impossible de se connecter; [10051] Une opération de socket a été tentée sur un réseau inaccessible."

Les deux fils sont amenés à faire des appels à LocalDevice et StreamConnection, donc ai-je besoin de synchroniser les fils de l'accès à ces ressources ou puis les fils accéder à ces simultanément? Puis-je verrouiller ces objets, ou dois-je faire défiler les threads, de sorte que le client dort pendant que le serveur écoute les connexions, et vice versa (j'essaie d'éviter les cycles parce que la séquence de découverte de périphériques dans Bluetooth est lent, et le thread client garderait le pas du serveur attendre la plupart du temps)? J'ai peu d'expérience avec le multi-threading et je suis encore en train d'apprendre le Bluetooth, donc si quelqu'un a des conseils ou des infos, j'apprécierais vraiment.

Répondre

1

Le matériel radio semble varier dans ses capacités. Certains, comme vous avez trouvé, semblent seulement vraiment soutenir une connexion ... Alors achetez un autre plus capable, mais je ne sais pas comment on sait qui ... :-(