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 :

Connexion via un socket à une balance precia Molen I40


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 51
    Points
    51
    Par défaut Connexion via un socket à une balance precia Molen I40
    Bonjour à tous,

    J'essaye de me connecter à une balance Precia Molen I40 via un socket PHP pour récupérer des infos sur une pesée effectuée par un opérateur.
    La balance est connectée sur le réseau et elle fonctionne avec le port 11001.
    Pour tester la connexion, j'ai utilisé le logiciel Hercules https://www.hw-group.com/software/he...-setup-utility, et là ça fonctionne bien.
    Je me lance donc pour faire la connexion avec la balance avec un simple code, et là ça bloque.
    Voilà mon code PHP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $ip = '192.168.1.121';
    $port = 11001; 
     
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if (socket_connect($socket,$ip,$port) == false) {
    	echo 'KO';
    	var_dump(socket_strerror(socket_last_error())); 
    } else {
    	echo 'OK';
    }
    socket_close($socket);
    Et au bout de deux minutes je reçois l'erreur: "socket_connect(): unable to connect [110]: Connection timed out"
    Et pendant la connexion, je fais un netstat sur le serveur et j'ai la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tcp        0      1 192.168.1.111:39954     192.168.1.121:11001     SYN_SENT    24508/php
    Apparemment, la porte semble fermée pour PHP mais pas pour Hercules, je dois me planter dans la configuration de mon socket, mais je ne vois pas où.
    Quelqu'un aurait une idée ?
    Merci d'avance.

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    Est tu certains que c'est bien en TCP que tu dois te connecter et pas en UDP ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    Je suis pas sur à 100%, car dans la doc il n'en parle pas du tout.
    Mais quand je teste avec l'autre logiciel, je test bien en TCP et la balance répond bien aux instructions.

    J'ai testé en UDP, et là ça marche.
    Je peux lui envoyé un message, mais lorsque je lis la réponse, ça bloque.
    Voilà le code:
    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
     
    $ip = '192.168.1.121';
    $port = 11001; 
     
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    socket_set_nonblock($socket);
     
    if (socket_connect($socket,$ip,$port) == false) {
    	echo 'KO';
    	var_dump(socket_strerror(socket_last_error())); 
    } else {
    	echo 'OK';
    }
     
    $in = chr(1).chr(13).chr(10);
    socket_write($socket, $in, strlen($in));
     
    echo "Lire la réponse : \n\n";
    $out = socket_read($socket, 2048);
    var_dump(strlen($out));
     
    socket_close($socket);
    Je suppose que c'est parce que le socket est toujours occupé.
    La commande netstat me donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    udp        0      0 192.168.1.111:58618     192.168.1.121:11001     ESTABLISHED 29906/php
    Et je suis obligé de killer le processus pour qu'il stoppe la connexion.
    Avec la fonction socket_set_nonblock, ça réglerai le problème ?

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    Je peux lui envoyé un message, mais lorsque je lis la réponse, ça bloque.
    Ça veux dire que la balance ne répond pas et que ton php attends une réponse jusqu'au timeout (que tu peux régler d'ailleurs , ca évite d'attendre 3 heures pour rien).

    socket_set_nonblock règlerais le problème dans le sens ou ta requête de lecture ne serait plus bloquante , mais tu n'aurais pas plus de résultats... Il faut à mon avis d'abord trouver pourquoi elle ne répond pas.

    Est tu certains de la trame que tu lui envoi ?

    Idéalement il faudrait passer un coup de wireshark qaund tu utilise ton logiciel de test pour voir ce qui diffère de tes requêtes à toi. (les joies de la programmation réseau ^^ )
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    Bon bah j'ai honte....

    En fait c'est bien du TCP, et ça bloquait parce que j'avais laissé le logiciel de test ouvert sur le port 11001, et donc il bloquait les autres connexions...
    Donc note pour ceux qui tomberaient sur ce poste:
    Assurez vous que le port n'est pas utilisé par un autre programme !

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

Discussions similaires

  1. Communication avec balance precia molen i20
    Par juju1988 dans le forum Langage
    Réponses: 21
    Dernier message: 28/05/2015, 17h50
  2. Réponses: 36
    Dernier message: 05/08/2012, 02h34
  3. Envoie données balance Precia Molen
    Par Elwe31 dans le forum VB.NET
    Réponses: 7
    Dernier message: 21/09/2011, 10h26
  4. bloquage d'une tentative de connexion via internet
    Par noussaENSI dans le forum Développement
    Réponses: 12
    Dernier message: 17/07/2006, 14h09
  5. Connexion via Socket JAVA
    Par jihene dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 08/06/2006, 19h50

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