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

[UDP]Reset de socket udp / changement d'adresse et de port


Sujet :

Réseau

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut [UDP]Reset de socket udp / changement d'adresse et de port
    Salut,

    Voici quelques détails de mon environnement :
    Windows XP Pro
    VS Express 2010
    Qt 4.5.2

    Mon projet a pour but de communiquer (depuis un pc) en UDP avec des petits modules électroniques. Le code embarqué dans ces modules ne reprend pas la totalité d'une pile IP/UDP/Ethernet classique, mais en reste assez proche.

    L'une des contraintes spécifiques est que le port source de mes paquets émis depuis mon pc doit être explicitement spécifié, et doit pouvoir changer au cours du temps.

    J'arrive aujourd'hui à communiquer avec ces modules, mais je bloque encore sur un problème. Je n'arrive pas toujours à ré-attribuer un nouveau port à mon socket (et c'est pour cela que je m'adresse à vous).

    Pour effectuer l'attribution de l'adresse et du port, j'utilise la méthode bind() qui fonctionne. Cependant, lorsque j'essaie de refaire un bind sur un socket "déjà bindé", il me met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QNativeSocketEngine::bind() was not called in QAbstrackSocket::UnconnectedState
    J'ai donc ajouté un disconnectFromHost() avant de refaire le bind(), et ça marche dans 90% des cas.

    Cependant, le problème persiste parfois :
    -si je fais un writeDatagram() puis flush() vers une adresse inexistante (mais valide) puis que j'essaie de changer le port, ça ne marche pas. Le signal error() me renvoit
    The address is not available
    J'ai donc essayé ( à la place du disconnectFromHost()) d'utiliser les méthodes abort() ou close() mais cela ne fonctionne pas.

    J'ai pas mal épluché la doc de QIODevice jusqu à QUdpSocket, sans rien trouver de convaincant. J'ai également essayé de fouiller dans les sources, mais vu qu'il y a pas mal de différences entre système, je suis un peu noyé dans les blocs spécifiques aux versions de Qt / OS.

    Merci,

    G.

  2. #2
    Membre confirmé

    Inscrit en
    Décembre 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 171
    Par défaut
    Je pense effectivement que tu dois te déconnecter mais je crois qu'il faut attendre le signal disconnected () pour faire ton bind(...).

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    void QAbstractSocket::abort ()

    Aborts the current connection and resets the socket. Unlike disconnectFromHost(), this function immediately closes the socket, discarding any pending data in the write buffer.

    See also disconnectFromHost() and close().
    C'est pour ça que j'avais essayé d'utiliser cette fonction, mais sans succès. Je pourrais en effet vérifier en attendant un changement d'état.

    G.

Discussions similaires

  1. socket UDP, problème de bind changement de port destination.
    Par johnnyjohnny dans le forum Réseau
    Réponses: 1
    Dernier message: 29/06/2009, 15h29
  2. [socket UDP] Codage BER : Format des Tag (TLG)
    Par Lolita59 dans le forum Réseau
    Réponses: 28
    Dernier message: 19/05/2006, 17h37
  3. Socket : UDP ou TCP
    Par lafracas dans le forum Développement
    Réponses: 2
    Dernier message: 10/04/2006, 22h43
  4. code c pour sockets (udp vers tcp et inversement)
    Par HiT dans le forum Développement
    Réponses: 11
    Dernier message: 19/11/2005, 18h03
  5. Notion sur Socket UDP
    Par oxor3 dans le forum Développement
    Réponses: 3
    Dernier message: 05/04/2004, 00h19

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