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 C Discussion :

[Socket] Reconnexion automatique du client


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut [Socket] Reconnexion automatique du client
    Salut

    Je vous explique en quelques mots mon client : il tente une connexion vers un serveur toutes les 30secondes. Une fois la connexion etablit il s'endort jusqu'à la fermeture du serveur et recommence à tenter une connexion.
    Petite precision, le serveur et le client ne sont pas dans le meme reseau.

    Voici le code principal :

    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
     
    while(1)
    	{
    		int ret;
    		char buffer[2048];
    		SOCKET sock;
    		struct sockaddr_in addrServ;
    		struct hostent *hote;
     
    		/* création socket */
    		sock = socket(AF_INET, SOCK_STREAM,0);
    		if ( sock == INVALID_SOCKET )
    			exit(3);
    		/*Connection au serveur */
    		addrServ.sin_family = AF_INET;
    		hote = gethostbyname(dns);
    		addrServ.sin_addr.s_addr = *(unsigned int*)(hote->h_addr_list[0]);
    		addrServ.sin_port = htons(port);
    		while ( connect(sock,(struct sockaddr *) &addrServ,sizeof(addrServ)) == SOCKET_ERROR ){
    			sleep(30000);
    		}
    		/* serveur connecté ! on lui envoit un msg */
    		send(sock,msg,sizeof(msg),0);
    		while ( recv(sock,buffer,sizeof(buffer),0) != SOCKET_ERROR )
    		{
    			sleep(1);
    		}
    		close(sock);
    	}
    /* liberation reseau */
    #if defined (_WIN32)
       WSACleanup();
    #endif
    Ca fonctionne bien, le seul problème est quand il y a une déconnexion de l'internet coté client, celui ci ne reprend plus ses tentatives de connexion au serveur une fois sa connexion internet retablit (en gros il tente de se connecter, je coupe ma livebox, je rebranche, il ne tente plus rien..).

    Voilà, j'espère que ce problème a une solution (je ne vois pas pourquoi il n'en aurait pas), mais j'ai pas reussit à la trouver

    Merci pour votre aide
    Sorry

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Rajoute un perror quand la connexion ne réussi pas quand tu n'a plus le net pour voir le message.

  3. #3
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut
    Je pense avoir trouvé, en tout cas un problème venait de recv qui est bloquant.

    J'ai donc mis un select pour contourner le problème du recv bloquant. Apparemment ça a l'air de marcher mais j'ai pas le temps de vraiment tester (semaine d'exams...), je verrai ça vendredi

  4. #4
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut
    En fait ce qui serait parfait, c'est une fonction pour savoir si la socket est toujours un file descriptor correct ou non..

    du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ( maSock == bad file descriptor )
      // il y a eut deconnexion
      // retour à la reconnexion au serveur

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu tentes un dup et si tu as une erreur EBADF, c'est qu'il est pas valide.

    Bon c'est du bidouillage mais y'a peut-être autre chose.

  6. #6
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut
    Citation Envoyé par Skyrunner
    Tu tentes un dup et si tu as une erreur EBADF, c'est qu'il est pas valide.
    késako ??

    En attendant de trouver mieux, j'ai mis ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ( send(sock,NULL,0,0) == SOCKET_ERROR )
       // il y a eut deconnexion
      // retour à la reconnexion au serveur

Discussions similaires

  1. Client TCP/IP comment gérer une reconnexion automatique ?
    Par GGelec dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 08/04/2013, 22h07
  2. Reconnexion automatique Client TCP
    Par abizot dans le forum Android
    Réponses: 1
    Dernier message: 22/10/2012, 13h46
  3. Reconnexion automatique du client SQL Server
    Par marsup077 dans le forum Administration
    Réponses: 2
    Dernier message: 11/04/2011, 13h19
  4. [Socket] Probleme entre un Client C et un serveur JAVA
    Par bpy1401 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 28/02/2006, 08h40
  5. [socket] port automatique
    Par hogan dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 18/07/2005, 21h22

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