Lecture d'un flux NSInputStream

skimpyskimpy Membre
05:26 modifié dans API AppKit #1
Bonjour,

J'avais posté un message il y a 1 semaine concernant un problème sur NSInputStream et hasBytesAvailable (qui retournait toujours NO). Je pensais que c'était dû à  mes threads qui communiquaient mal entre eux. Ne trouvant pas la solution, j'ai donc décidé de recommencer avec une toute petite application, qui envoie simplement une commande LIST à  un serveur de news. Malheureusement, j'ai toujours le même problème ! hasBytesAvailable renvoie NO alors que le delegate NSStreamEventHasBytesAvailable dit qu'il a bien des données à  lire !

Je mets en attachement l'application pour les personnes qui auraient la générosité de m'aider  :D à  trouver ce qui ne va pas dans mon code.

Merci.

Pour que ça fonctionne, il faut juste remplacer dans le fichier AppController.m, méthode init, le serveur de news que vous avez (pour moi, c'est wanadoo, le port standard est 119 et 1 correspond au nombre de connexion possible sur le serveur, mais pour le moment, je ne l'utilise pas ; je me contente d'essayer de le faire fonctionner avec le strict minimum !)

[Fichier joint supprimé par l'administrateur]

Réponses

  • skimpyskimpy Membre
    05:26 modifié #2
    Bon je pense avoir trouvé le problème ! Finalement, je n'utilise plus hasBytesAvailable.
    Voilà  ce que j'ai constaté :

    Quand le buffer dans lequel on fait un read n'est pas rempli, hasBytesAvailable retourne 0, sinon 1.
    Je m'explique :
    <br />uint8_t buffer[1024];<br />memset((char *)buffer, &#39;&#092;0&#39;, sizeof(buffer));<br />bytesRead = [streamIn read:buffer maxLength:sizeof(buffer)];<br />
    


    donc si bytesRead vaut 1024, hasBytesAvailable retourne 1, sinon 0. Voici le résultat de mon NSLog :


    2006-03-18 23:15:34.913 NLTest[4960] hasBytesAvailable : 1 - bytesRead : 1024
    2006-03-18 23:15:34.914 NLTest[4960] hasBytesAvailable : 1 - bytesRead : 1024
    2006-03-18 23:15:34.914 NLTest[4960] hasBytesAvailable : 0 - bytesRead : 819
    2006-03-18 23:15:34.915 NLTest[4960] hasBytesAvailable : 0 - bytesRead : 780
    2006-03-18 23:15:34.916 NLTest[4960] hasBytesAvailable : 0 - bytesRead : 852


    Et la doc d'Apple spécifie bien :

    hasBytesAvailable
    Returns YES if the receiver has bytes available to read. The receiver may also return YES if a read must be attempted in order to determine the availability of bytes.


    QU'en pensez-vous ?
Connectez-vous ou Inscrivez-vous pour répondre.