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

Réseau .NET Discussion :

Application C# / WebService PHP - Problème de socket


Sujet :

Réseau .NET

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Application C# / WebService PHP - Problème de socket
    Bonjour tout le monde,

    J'ai actuellement un soucis avec les sockets que j'utilise dans mon programme (le message est envoyé en double).

    Voici la situation, le code en PHP qui envoie le message est celui-ci :

    Le code part d'ici :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    // simple POST Request
    /*
     * Cette partie concerne le push d'une notification au Web Service qui va se charger de l'envoyer aux personnes concernées.
    *
    * Paramètres attendus :
    * - $message : Contenu de la notification qui sera affiché en pop-up
    * - $url : Contient l'url pointant sur la notification
    * - $id_guid : Contient l'id du group à qui est envoyé la notification
    * - $id_guid_wall : Contient l'id du mur qui concerne la notification (ou pas suivant le type de notification).
    */
    $message = "**********";
    $url_notif = "**************";
    $id_guid = 2;
    $id_guid_wall = 4;
     
    // Ici, on place l'URL de la page de traitement suivant les paramètres reçus
    $url = 'http://************/web-service-notifications/traitement_requete.php';
     
    // On enregistre dans un tableau l'ensemble des données que nous avons besoin
    $data = array('method'=>"push", 'message' => $message, 'url' => $url_notif, 'id_guid' => $id_guid, 'id_guid_wall' => $id_guid_wall);
     
    // On enregistre dans un tableau la "structure" d'envoi de données par une requête POST
    $options = array(
    		'http' => array(
    				'header'  => "Content-type: application/x-www-form-urlencoded;charset=UTF-8",
    				'method'  => 'POST',
    				'content' => http_build_query($data),
    		),
    );
     
    // On crée un contexte de flux entre la page et cette page pour envoyer puis réceptionner une réponse (si l'action s'est bien effectuée ou pas)
    // Le contexte de flux se résume à la mise en place du tunnel de données entre les deux pages
    $context  = stream_context_create($options);
     
    // On lance la requête et on attends la réponse du côté de la page $url.
    $result = mb_convert_encoding(file_get_contents($url, false, $context), 'UTF-8',mb_detect_encoding(file_get_contents($url, false, $context), 'UTF-8, ISO-8859-1', true));
     
    echo $result;
    ?>
    Je lance ce code via une page PHP (qui en fait sera lancé quand une notification arrivera sur le site

    Puis elle passe dans ce code qui appelle sendTo:

    (traitement_requete.php)

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    <?php
    /*
     * Cette partie s'occupe de traiter les différentes requêtes HTTP faites par un utilisateur ou par Link Us
     */
     
    // On précise que cette partie utilise le format JSON et on inclue les fonctions utiles
    include_once("functions.php");
     
    // On vérifie si des données POST ont été reçues (que du POST que ce soit côté utilisateur comme côté Link US
    if(isset($_POST)){
     
    	// On gère la connection d'un utilisateur
     
    	if($_POST['method'] == "connect"){
     
    		// On récupère les données de session de l'utilisateur
    		$session=$_POST['session'];
    		$ip=$_POST['ip'];
    		$port=$_POST['port'];
     
    		// On exécute la fonction qui va bien et on s'assure de son bon fonctionnement
    		$result=connectionTo($session,$ip,$port);
     
    		// On teste pour voir la fonction a bien fonctionnée
    		if($result != 1){
     
    			// Si aucun résultat alors le problème se situe au niveau de la fonction même
    			deliver_response(200, "No response for this user", NULL);
    		}
    		else
    		{
    			// L'instruction s'est bien passée, on renvoi une réponse positive avec le résultat.
    			deliver_response(200, "Modified : OK", $session . " added");
    		}
    	}
    	// On gère la déconnection d'un utilisateur
    	else if($_POST['method'] == "disconnect"){
     
    		// On récupère le nom de session de l'utilisateur
    		$session=$_POST['session'];
     
    		// On exécute la fonction qui va bien et on s'assure de son bon fonctionnement
    		$result=disconnectionFrom($session);
     
    		// On teste pour voir la fonction a bien fonctionnée
    		if($result != 1){
     
    			// Si le résultat est null, alors il n'y a eut aucun changement
    			deliver_response(200, "Modified : No", "No update");
    		}
    		else
    		{
    			// L'instruction s'est bien passée, on renvoi une réponse positive avec le résultat.
    			deliver_response(200, "Modified : OK", $session . "  deleted");
    		}
    	}
     
    	// On gère le push d'une notification
    	else if($_POST['method'] == "push"){
     
    		// On exécute la fonction qui va bien et on s'assure de son bon fonctionnement, les paramètres sont directs.
    		$result=sendTo($_POST['message'], $_POST['url'], $_POST['id_guid'], $_POST['id_guid_wall']);
     
    		// On teste pour voir la fonction a bien fonctionnée
    		if(empty($result)){
     
    			// Si aucun résultat alors le problème se situe au niveau de la fonction même
    			deliver_response(200, "No response for this notification", NULL);
    		}
    		else
    		{
    			// L'instruction s'est bien passée, on renvoi une réponse positive avec le résultat.
    			deliver_response(200, "Notification sent", $result);
    		}
    	}
    	else
    	{
    		// Aucune des méthodes n'a fonctionné, le champs "method" n'est donc pas correct.
    		deliver_response(404, "Problem with method", null);
    	}
    }
    else
    {
    	// On ne peut pas exécuter la page sans les bons paramètres, il y a donc un problème
    	deliver_response(404, "Problem with POST request", null);
    }
     
    ?>
    Donc cela appel sendTo :



    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    function sendTo($message,$url,$id_guid,$id_guid_wall){
     
    	/*
    	 * CETTE PARTIE SERA A ADAPTE AVEC LE TABLEAU DES UTILISATEURS EN LIGNE
    	 */
    	// On récupère l'adresse de destination
    	$address    = '**.***.**.***';
    	// On récupère le port d'écoute
    	$service_port    = ****;
     
    	// On stocke les données dans un tableau
    	$data = array('message'=>utf8_encode($message), 'url'=>$url, 'id_guid'=>$id_guid, 'id_guid_wall'=>$id_guid_wall);
     
    	// On les encode au format JSON 
    	$in = json_encode($data);
     
    	// On crée une socket TCP/IP 
    	$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    	if ($socket === false) {
    		echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "<br />";
    	}
     
    	// On se connecte à la machine distante via la socket créée, l'adresse IP et le numéro de port
    	$result = socket_connect($socket, $address, $service_port);
     
    	if ($result === false) {
    		echo "socket_connect() failed.<br />Reason: ($result) " . socket_strerror(socket_last_error($socket)) . "<br />";
    	}
     
    	// On envoi la notification au format JSON
    	echo socket_write($socket, $in, strlen($in));
     
    	// On ferme la connexion
    	socket_close($socket);
    	return "Transmission OK";
    }
    Ci-joint la capture de wireshark (en bleu surligné c'est ma data attendue) à voir il envoi deux fois de suite ....

    Nom : img.jpg
Affichages : 441
Taille : 395,6 Ko

    Merci à tout ceux qui pourront m'aider à résoudre ce problème de doublons ....

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Il me semble que mon problème vient de ma requête POST ... à voir il y aurait des bugs sur les requêtes POST qui s'enverrai en double ... des idées sur ce problème ?

Discussions similaires

  1. [Web Service] Problème de paramétrage avec un webservice PHP
    Par gafish dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 12/11/2012, 14h02
  2. WebService CXF avec Spring - Client PHP : Problème encoding
    Par barbu0055 dans le forum Services Web
    Réponses: 1
    Dernier message: 11/01/2010, 11h47
  3. [MySQL] problème avec mon application de recherche php/mysql
    Par cuisto44000 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/06/2008, 03h01
  4. [PHP-JS] Problème de socket, passer par un proxy
    Par Kruggs dans le forum Langage
    Réponses: 1
    Dernier message: 13/07/2007, 01h15
  5. problème de socket dans une application win32
    Par deck_bsd dans le forum Windows
    Réponses: 5
    Dernier message: 20/01/2007, 18h32

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