IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Réseau] Socket_read, résultat à la ligne ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut [Réseau] Socket_read, résultat à la ligne ?
    Bonjour !

    J'aimerai que l'on m'éxplique comment faire pour séparer les diférents blocs que l'on me revois avec socket_read (que je récupere comme sa):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo "Réponse  : <br/>\n\n";
    		while ($out = socket_read($socket, 2048)) {
        		echo "$out <br/>"; 
    		}
    car la je reçoit tout suite à suite, et c'est donc trés désordoné.

    Donc ma question en clair, c'est comment faire aller à la ligne les trés nombreux éléments ce que je reçoit, et ce de maniere automatique.

    Merci .

  2. #2
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Je ne suis pas sur que ma solution soit bonne, mais peut être en essayant un fopen/fget/fread plutot qu'un fsock...

    Sinon, ton probleme est un probleme de protocole... Pour bien faire, il faudrait que tu sache la taille du packet que tu attends (auquel cas tu lis tant que ton buffer ne fait pas la taille attendue en mettant en parametre pour le read la taille restante du packet attendu a chaque itération de la boucle...

    Sinon, suivant ton type de données transféré, tu peux mettre des marqueurs de fin de chaines (0x00 par exemple si c du texte)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut
    En fait je reçoit juste du texte.
    Le probleme c'est que la taille de ce texte varie, mais chaque début de ligne est introduit par "*** untruc"

    "***" étant un nombre et "untruc" correspond à la valeur d'une variable défini dans mon script.


    en fait sa correspond à un MOTD qu eme renvoie un serveur irc.

    ps: Comment puis-je récuperer la taille du paquet ?

  4. #4
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    La taille du paquet attendu doit se détermine par le protocole : c'est une règle, une convention définie arbitrairement par le créateur du programme (ou normalisée, style RFC).

    Pour l'IRC, autant que je me souvienne, il n'y a pas de marqueur de fin de chaine. Il y a donc fort à parier - dans le mesure ou ce sont des string de taille varibales transmises - que la taille de chaque packet attendu soit indiquer au début de chaque message.
    Pour répondre à cette question, il faut donc regarder la doc du protocole IRC.

    Désole de pas pouvoir t'aider d'avantage !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut
    Y'a pas de mal, peut être que sa correspond au chifre introduisant chaque méssage .

    mais je vois pas comment récuperer ces valeurs .

  6. #6
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Si tes messages commencent par un chiffre, c'est très probablement soit la taille, soit l'ID du message...
    Si c'est bien la taille (tu devrais pas avoir de mal a imaginer des test pour tester ça), alors tu fait un read sur ton socket de cette taille.
    Si la taille lu est inférieur à ce que tu attendais, tu boucle sur ton readsock, en demandant la taille total - taille deja récupéré et tu concatene ce que tu lis dans un buffer jusqu'a ce que ça fasse la taille désirée...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  2. Erreur 233 sous sql server
    Par brajae85 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/05/2009, 16h12
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo