2016-08-04 1 views
1

Je fais une application qui permettra aux gens de partager des fichiers entre eux. En ce moment j'essaye juste de partager le texte, mais bientôt je le changerai en Fichiers. Mais j'ai du mal à créer la connexion Socket (les 2 appareils sont déjà connectés via hotspot: l'un est le hotspot, l'autre s'y connecte). J'allais faire une connexion socket java normale, mais ensuite je lis ici que si le téléphone se met en veille les prises se ferment/timeout. La solution que vous avez recommandée pour ce problème était d'utiliser les services d'intention.Android - Envoi de données entre le serveur et le client

J'ai créé deux IntentServices, un ClientCommService et un ServerCommService. Je suppose que dans la méthode onHandleIntent(), je devrais créer les sockets et commencer à écouter/attendre les messages entrants (créer les objets de flux et démarrer les sockets). Mon problème est que je veux aussi envoyer des messages et je ne sais pas où je devrais mettre la logique pour envoyer un message this.out.writeObject(). Ceci est important, car je veux créer une communication bidirectionnelle, qui peut être démarrée par n'importe lequel des membres (serveur ou client).

Question 2: Certaines approches que j'ai vues ici sur stackoverflow, ont seulement créé un IntentService pour le serveur. Pourquoi?

Répondre

0

Si vous souhaitez conserver votre service après votre sommeil, vous devez créer Service au lieu de IntentService.

Vous devez également conserver votre service en tant que service COLL. N'oubliez pas que ce service s'exécute sur le thread principal, vous devez donc prendre soin de votre code pour ne pas interrompre le thread de l'interface utilisateur.

Vous pouvez mettre votre logique client/serveur dans la méthode onStartCommand.

+0

Alors IntentService ne fonctionne pas? En passant, où devrais-je mettre la logique d'envoi? Je veux une connexion bidirectionnelle .. Merci pour votre aide –

+0

IntentService gère sa file d'attente, donc ce sera le système FIFO mais je suppose que dans votre cas, il pourrait y avoir plus d'une opération sera là. Vous pouvez écrire la logique de votre serveur client dans la méthode onStartCommand en tant que client et la logique du serveur appellera indépendamment. – dhams

+0

Mise à jour: je ne peux pas mettre la logique sur onStartCommand parce qu'elle me donnera l'exception networkonmainthread. J'ai réussi à le mettre en marche, mais maintenant j'ai d'autres problèmes, avec le fait que puisque j'ai 2 threads dans un service (qui sont lancés à des moments différents), j'ai des problèmes avec le socket déjà utilisé. –