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

C Discussion :

Blocage connexion entre un robot et un pc


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 3
    Par défaut Blocage connexion entre un robot et un pc
    Bonjour à tous,

    Je suis débutant en langage C et pour mon travail on me demande de faire une modification d'un programme déja existant afin d'effectuer une fonction en plus. Nous devons tester la connexion entre un robot et un pc. Si le PC n'est pas allumé, un message d'alarme doit apparaitre sur le robot.

    Voici la ligne de test de la connexion:

    Res=mpConnect(sockHandle,(struct sockaddr *)&PCServeur, sizeof(PCServeur));

    Le problème est que lorsque le PC est éteint, le programme reste bloqué à cette ligne.
    Comment faire pour tester cette connexion et passer cette ligne meme si aucune réponse n'est existante? (j'ai pensé à une tache parallele permetant de tester le temps de réponse mais je ne sais pas du tout comment faire?)

  2. #2
    Membre éclairé Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ICD
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 508
    Par défaut
    Que te retourne Res a ce moment la ? en cas de non connection mpConnect devrais te renvoyer -1.
    Tu es sur quel système d'exploitation ?

    Je pense que ta socket sockHandle lorsque tu l'a crée est bloquante, c'est pourquoi tu bloque au lieu de passer à la suite

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 3
    Par défaut
    Le systeme d'exploitation est windows XP.
    "Res" ne retourne rien, ce qui est logique sinon il arriverait à passer à la ligne d'aprés. Là il reste bloqué.
    Le PC étant eteint, une des varaibles d'entrée peut ,peut etre, poser probleme?

    Ci-dessous la fonction dans laquelle la ligne se trouve:
    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
    int Connection_Socket(ULONG portNo, char *MaString)
    /* Ouvre la connection entre le robot et le PC*/
    
    {
        int Res;
        
        memset(&PCServeur, 0, sizeof(PCServeur));
        sockHandle = mpSocket(AF_INET, SOCK_STREAM, 0);
        if (sockHandle < 0)
        {  
           printf("\nConnection echoué SockHandle");
           return 0; //Connection Echoue
        }      
        PCServeur.sin_family = AF_INET;
        PCServeur.sin_addr.s_addr =mpInetAddr(ipAddr);
        PCServeur.sin_port=mpHtons(portNo);
        
        Res=mpConnect(sockHandle,(struct sockaddr *)&PCServeur, sizeof(PCServeur));
        if (Res!=0)
        {  
           printf("\nConnection %d:%s",Res,ipAddr);
           return 0; //Connection Echoue
        }         
          mpTaskDelay(100);
        Res=mpSend(sockHandle,MaString,strlen(MaString),0);
        if (Res<0)
        {  
           printf("\nConnection echoué Send");
           return 0; //Connection Echoue
        }          
        mpClose(sockHandle);
        return 1;
    }
    Ci-dessous une description de la fonction mpconnect

    mpConnect
    Initiate a connection to a socket
    Syntax
    #include “mpSocket.h”
    LONG connect(LONG sockfd, const struct sockaddr *addr, LONG addrlen);

    Description
    If s is a socket of type SOCK_STREAM, this routine establishes a virtual circuit between s and another socket specified by name. If s is of type SOCK_DGRAM, it permanently specifies the peer to which messages are sent. If s is of type SOCK_RAW, it specifies the raw socket upon which data is to be sent and received. The name parameter specifies the address of the other socket.

    Parameter
    [sockfd]
    Socket descriptor created by mpSocket.
    [addr]
    Pinter of the sockaddr structure kept socket address.
    Actual pointer of addr depends on address family but Moto-Pro supports only sockaddr_in.
    [addrlen]
    Size of the address structure of the addr

    Return
    0 :Normal end
    Non Zero: error

  4. #4
    Membre éclairé Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ICD
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 508
    Par défaut
    Au moment de créer ta socket, essaye ca pour rendre ta socket non bloquante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <sys/ioctl.h>
    {...}
    sockHandle = mpSocket(AF_INET, SOCK_STREAM, IPPROTO_TCP); /* Si tu es en TCP */
    int arg = 1;
    if (ioctl(sockHandle, FIONBIO, &arg) == -1)
    {
    	printf("Can't switch socket to non-blocking mode");
    	return 0;
    }

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 3
    Par défaut
    Je ne peux pas inclure cette librairie. J'ai qu'un certain nombre de librairie possible :

    _mingw.h
    assert.h
    ctype.h
    errno.h
    limits.h
    locale.h
    math.h
    stdio.h
    stdlib.h
    string.h
    time.h

    Est-il possible de faire une tache en parallele qui mesure un temps, afin que si je n'ai aucune réponse de la fonction dans un temps donné je puisse attribuer une valeur qui me permettra de savoir que le pc n'est pas connecté?

Discussions similaires

  1. [JDBC]connexion entre db2 et l'annuaire ldap
    Par Man Crado dans le forum JDBC
    Réponses: 4
    Dernier message: 10/10/2005, 11h34
  2. [JNDI]connexion entre jndi et l'annuaire ldap
    Par Man Crado dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 10/10/2005, 11h33
  3. probleme de connexion entre delphi 7 et une BD access
    Par bob.marley dans le forum Bases de données
    Réponses: 5
    Dernier message: 21/04/2004, 11h17
  4. Connexion entre deux ordi [Débutant]
    Par Ryadus dans le forum Développement
    Réponses: 2
    Dernier message: 12/06/2003, 21h47
  5. Réponses: 4
    Dernier message: 04/07/2002, 12h31

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