J'essaie d'écrire un client pour Android qui est censé communiquer avec l'application serveur PC sur le réseau local. L'application serveur est écrite par mon ami en C#. Actuellement, il existe une application iPhone qui utilise cette application serveur sans problèmes.Problème TCP - se bloque lors de la lecture de la réponse du serveur
J'ai très simple code client TCP:
1. Socket s = new Socket(server, port);
2. OutputStream out = s.getOutputStream();
3. PrintWriter output = new PrintWriter(out);
4. output.println("ACTION=Next&VALUE=0&");
5. BufferedReader input = new BufferedReader(new nputStreamReader(s.getInputStream()));
6. String st = input.readLine();
Je suis passé par de nombreux exemples de mise en œuvre de TCP, et ils sont tous semblables. Assez comme mon code ci-dessus. Mon application se bloque à la ligne 6 lorsque j'essaie de lire la réponse du serveur. Il ne provoque pas d'erreurs (aucune exception), rien ne s'affiche dans le débogueur, juste une erreur de délai après un certain temps. Le serveur est supposé renvoyer une chaîne après l'exécution de mon action à la ligne 4. Je ne comprends pas pourquoi ce code se bloque. L'entrée n'est pas NULL (je l'ai vérifié). Je m'attendrais à ce qu'une exception soit lancée ou simplement une chaîne vide à renvoyer.
Alors? Qu'est-ce que je rate? Pourrait-il être un problème avec certains caractères spéciaux que l'application du serveur envoie et Android ne peut pas gérer cela? Ai-je besoin d'une autorisation spéciale dans mon manifeste?
Je suis certain que j'ai une adresse IP correcte et un numéro de port correct. Je peux voir cela sur l'application serveur fonctionnant sur mon PC.
Merci.
Est-ce que readLine() attend un caractère de retour à la ligne? Le serveur est-il censé envoyer une nouvelle ligne? – Slartibartfast
Merci. C'était l'un des problèmes. En tant qu'auteur d'application de serveur de terminaison de message, utilisez la séquence. Il s'est avéré qu'il y avait plus d'un problème. Dans la ligne 4, j'ai dû remplacer tous les caractères & & mais ce n'était pas la solution. Il semble que PrintWriter ajoute quelque chose à OutputStream, probablement \ n caractère ou quelque chose de similaire. Le serveur n'a pas aimé cela et mes actions ont été ignorées. J'ai essayé PrintStream au lieu de PrintWriter et cela a fonctionné parfaitement. –
bobetko