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 :

Probleme reception socket


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut Probleme reception socket
    Bonjour,

    Je rencontre un problème avec la réponse à ma socket.

    Je sniffe la com et je vois bien passer la socket en emition et reception mais je n'ai rien dans mon 'socket_read'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    	$ip_dest='192.168.168.21';
    	$packet="\x40\x36\x33\x37\x66\x30\x30\x30\x30\x30\x31\x56\x45\x52\x31\x34\x0d";
     
    	$socket_udp_fw=socket_create(AF_INET,SOCK_DGRAM,SOL_UDP);
    	socket_set_option($socket_udp_fw,SOL_SOCKET,SO_RCVTIMEO,array('sec'=>5,'usec'=>0));
    	socket_connect($socket_udp_fw,$ip_dest,6700);
    	socket_send($socket_udp_fw,$packet,strLen($packet),0);
    	$buffer='';
     
    	if(@socket_read($socket_udp_fw,255,PHP_NORMAL_READ)!=false){
    		$data=@socket_read($socket_udp_fw,255,PHP_NORMAL_READ);
    		echo $data;
    	}else{
    		$error_number=socket_last_error($socket_udp_fw);
    		echo socket_strerror($error_number);
    	}
    	socket_close($socket_udp_fw);
    ?>
    Qu'est-ce que je ne fais pas bien ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu aurais peut être un début de réponse en enlevant le @ devant ton socket read
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut
    Merci pour ta réponse.

    Déjà fait.
    "PHP Warning: socket_read(): unable tu read from socket [0] : Une tentative de connexion a échouée car le parti connecté n'a pas repondu convenablement...... bla bla bla"

    Alors que Wireshark voit bien le retour.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Citation Envoyé par catapicultrophe Voir le message
    "PHP Warning: socket_read(): unable tu read from socket [0] :
    mais je n'ai rien dans mon 'socket_read'
    je pense qu'il y'a un petit lien de cause à effet .

    Plus sérieusement voir la réponse dans wireshark ne veux pas dire que ta socket à réussit à la lire. C'est d'autant plus vrai en UDP qui se contente de balancer des packet sur le réseau sans savoir si il arrive ou non.

    Le serveur de l'autre coté est en quel langage ? Tu est certai nque la socket est en UDP ? Une socket en SOCK_STREAM TCP n'est pas envisageable au moins le temps de tester ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut
    Oui je sais qu'en UDP il n'y a aucun contrôle et aucun moyen de tester en TCP.

    Ce qui me dit qu'il y a un problème dans mon code c'est que wireshark voit la réponse et qu'elle est bonne. En fait je me demande même si le socket_read n'est pas executé en retard donc que la réponse à la socket est déjà reçue...

    Ca se fait de mettre le socket_read avant le socket_send ?

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Citation Envoyé par catapicultrophe Voir le message
    Oui je sais qu'en UDP il n'y a aucun contrôle et aucun moyen de tester en TCP.

    Ce qui me dit qu'il y a un problème dans mon code c'est que wireshark voit la réponse et qu'elle est bonne. En fait je me demande même si le socket_read n'est pas executé en retard donc que la réponse à la socket est déjà reçue...

    Ca se fait de mettre le socket_read avant le socket_send ?
    socket_read est bloquant (de mémoire) donc non. Si tu le met avant ton send se fera jamais.

    Et puis je vois pas comment une requête réseau pourrait aller plus vite que l'appel à une fonction (la socket se met en lecture dès l'envoi fini).

    En revanche dans ton code tu lit une fois 255 octet dans le if puis tu essai d'en relire encore 255. Donc si tu ne renvoi à ton php que 255 octets c'est normal que ton $data soit vide puisque lu juste avant.

    Quelque chose comme ceci serait peut être plus jsute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $data = socket_read($socket_udp_fw,255,PHP_NORMAL_READ);
    if($data !=false){
    	echo $data;
    }else{
    	$error_number=socket_last_error($socket_udp_fw);
    	echo socket_strerror($error_number);
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut
    Oui c'était très maladroit...

    j'ai corrigé !

    Retournons la question : J'envoie la socket et elle revient (ça c'est factuel puisque mesuré avec Wireshark).

    Pu'est-ce qui pourrait faire que je ne la reçoit pas dans mon socket_read() ?

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Pu'est-ce qui pourrait faire que je ne la reçoit pas dans mon socket_read() ?
    Comme ça je dirais bien que la socket est fermée quand tu essai de lire dessus non ? Ton serveur ne fermerait pas la socket une fois qu'il à envoyé sa réponse ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut
    Certainement... mais il renvoit la réponse avant.

    Je viens de m'apercevoir d'une chose bizarre...

    Ma requete sort du PC du 2282 vers le port 6700 en UDP.

    La réponse sont du serveur du 6700 vers le 6700 de mon PC !!!

    Donc il me faut une écoute sur le port 6700 puisqu'il n'est pas le même que le port sortant.

    Mon raisonnement est-il correcte ?

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Mon raisonnement est-il correcte ?
    J'ai envie de te dire oui , mais après mes connaissances réseaux sont sommes toute assez limitées
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Probleme reception de donnees par Socket
    Par herrs dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 10/07/2008, 12h29
  2. Probleme de socket
    Par Pragmateek dans le forum C++
    Réponses: 14
    Dernier message: 11/03/2006, 23h37
  3. Probleme reception avec utilisation de TComPort
    Par MDiabolo dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/02/2006, 21h21
  4. [Debutant] Probleme connection socket
    Par sorry60 dans le forum Réseau
    Réponses: 38
    Dernier message: 12/11/2005, 12h46
  5. Probleme reception de mail
    Par flouflou dans le forum Outlook
    Réponses: 2
    Dernier message: 20/07/2005, 11h51

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