Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2011, 11h07   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 50
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2007
Messages : 50
Points : 14
Points : 14
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 :
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
catapicultrophe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 13h38   #2
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Tu aurais peut être un début de réponse en enlevant le @ devant ton socket read
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 13h44   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 50
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2007
Messages : 50
Points : 14
Points : 14
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.
catapicultrophe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 16h31   #4
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Citation:
Envoyé par catapicultrophe Voir le message
"PHP Warning: socket_read(): unable tu read from socket [0] :
Citation:
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 ?
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 16h58   #5
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 50
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2007
Messages : 50
Points : 14
Points : 14
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 ?
catapicultrophe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 17h04   #6
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
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 :
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);
}
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 17h41   #7
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 50
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2007
Messages : 50
Points : 14
Points : 14
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() ?
catapicultrophe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 10h09   #8
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Citation:
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 ?
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 12h00   #9
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 50
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2007
Messages : 50
Points : 14
Points : 14
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 ?
catapicultrophe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 13h44   #10
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Citation:
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
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h21.


 
 
 
 
Partenaires

Hébergement Web