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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

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, 11h29
  2. Probleme de socket
    Par Pragmateek dans le forum C++
    Réponses: 14
    Dernier message: 11/03/2006, 22h37
  3. Probleme reception avec utilisation de TComPort
    Par MDiabolo dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/02/2006, 20h21
  4. [Debutant] Probleme connection socket
    Par sorry60 dans le forum Réseau
    Réponses: 38
    Dernier message: 12/11/2005, 11h46
  5. Probleme reception de mail
    Par flouflou dans le forum Outlook
    Réponses: 2
    Dernier message: 20/07/2005, 10h51

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