2010-06-25 4 views
0

Je vous écris une application pour mon iphone que les réseaux à mon ordinateur exécutant une application java en utilisant AsyncSocket. Du côté de Java, il devrait imprimer "Ok" quand l'iPhone se connecte au serveur. J'ai également ajouté une commande sleep() du côté de l'iPhone, donc après il se connecte au serveur, il envoie des données et puis dort pendant 5 secondes. Mais, du côté java, toutes les données, y compris le « Ok » et les données est imprimé après la commande du sommeil. C'est comme si l'iPhone ne se connectait qu'après l'exécution du programme. Quelqu'un peut-il m'aider s'il vous plaît? Merci ...AsyncSocket Délai

Répondre

1

AsyncSocket est destiné à être le feu et à oublier. Vous n'êtes pas censé attendre que quelque chose arrive. Tout le but de cette classe est de faire son truc en arrière-plan et de vous avertir quand c'est fait.
Si vous avez besoin d'une prise de blocage alors vous devez utiliser autre chose.

1

La raison pour laquelle vous voyez ce problème est que AsyncSocket s'exécute de manière asynchrone sur le cycle de démarrage, mais lorsque vous appelez sleep(), vous bloquez le cycle de fonctionnement sur lequel AsyncSocket essaie de s'exécuter.

Lorsque vous appelez [AsyncSocket connectToHost: ...], la méthode retourne immédiatement et la tentative de connexion se poursuit en arrière-plan. La méthode déléguée vous informera du moment où la connexion est établie. Mais le code qui termine la configuration de la connexion (dans AsyncSocket) doit également s'exécuter sur la boucle de démarrage.

De même, lorsque vous appelez [AsyncSocket writeData: ...], la méthode retourne immédiatement. Le code qui envoie ces données est programmé pour s'exécuter sur la boucle de démarrage du socket. Mais si vous appelez sleep(), vous empêchez ce code de s'exécuter.