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 :

SDL_Net Socket et requete HTTP


Sujet :

C

  1. #1
    Membre régulier Avatar de Topeur
    Profil pro
    Inscrit en
    Février 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 91
    Points : 78
    Points
    78
    Par défaut SDL_Net Socket et requete HTTP
    Bonjour a tous,

    Je suis a la recherche d'une solution pour lire en continu une image jpeg. Je m'explique.

    Sur le serveur d'une caméra IP, il y a un fichier JPEG. Cette image est mis à jour continuellement par la caméra pour être au plus proche de ce qu'elle voit.
    Par l'intermédiaire de la bibliothèque SDL_net, j'ai réussi à effectuer une requête HTTP de type GET vers cette image et j'arrive à la récupérer.

    Mais mon souci c'est le coté temps réels.
    A chaque image que je veux capturer, il faut que j'ouvre un socket, que j'envoie une requête puis récupère l'image et ferme le socket.
    J'ai déjà tenté beaucoup de chose mais je n'ai pas trouvé de solution.

    Mon souci vient du fait que je perds beaucoup de temps à ouvrir mon socket et le refermer. Y'a t'il un moyen de contourner ça ?
    En résumé, je voudrais un système ou je n'ouvre qu'une seule fois le socket, que je récupère des images quand je le veux et ferme le socket avant de quitter le programme.

    Si vous avez des idées, je suis preneur car pour le moment, j'ai épuisé mon stock d'idée merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Topeur Voir le message
    Sur le serveur d'une caméra IP, il y a un fichier JPEG. Cette image est mis à jour continuellement par la caméra pour être au plus proche de ce qu'elle voit.
    Par l'intermédiaire de la bibliothèque SDL_net, j'ai réussi à effectuer une requête HTTP de type GET vers cette image et j'arrive à la récupérer.

    Mais mon souci c'est le coté temps réels.
    A chaque image que je veux capturer, il faut que j'ouvre un socket, que j'envoie une requête puis récupère l'image et ferme le socket.
    J'ai déjà tenté beaucoup de chose mais je n'ai pas trouvé de solution.

    Mon souci vient du fait que je perds beaucoup de temps à ouvrir mon socket et le refermer. Y'a t'il un moyen de contourner ça ?
    En résumé, je voudrais un système ou je n'ouvre qu'une seule fois le socket, que je récupère des images quand je le veux et ferme le socket avant de quitter le programme.

    Si vous avez des idées, je suis preneur car pour le moment, j'ai épuisé mon stock d'idée merci d'avance
    Je ne vois pas bien pourquoi tu dois ouvrir et fermer la connexion à chaque fois.

    Serveur d'image TCP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ouvrir la socket serveur : socket()
    configurer l'écoute : listen()
    FAIRE
     attendre une connexion client : accept()
     FAIRE
      lire image : fread()
      emettre l'image : send()
      attendre acquittement : recv()
     TANT QUE ce n'est pas la fin de la connexion client
     fermer la connexion client
     TANT QUE ce n'est pas la fin de l'application serveur
    fermer la socket serveur
    Client TCP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ouvrir la socket serveur : socket()
    se connecter au serveur : connect()
    FAIRE
      recevoir l'image : recv()
      emettre l'acquittement : send()
      stocker image : fwrite()
    TANT QUE ce n'est pas la fin de la connexion client
    fermer la connexion
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Je ne vois pas bien pourquoi tu dois ouvrir et fermer la connexion à chaque fois.
    Visiblement parce que d'une part, il n'a pas accès aux sources du serveur (à vérifier) et que d'autre part, la machine en question semble communiquer avec l'extérieur en utilisant un nano-serveur web ...

    Le mieux, quitte à bidouiller, serait quand même d'aller directement parler avec la caméra.

  4. #4
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Bonjour,

    Citation Envoyé par Emmanuel Delahaye
    Je ne vois pas bien pourquoi tu dois ouvrir et fermer la connexion à chaque fois.
    La norme HTTP/1.0 le veut, ensuite il y'a eu HTTP/1.1 pour une connexion persistante, mais le serveur Web ne va pas attendre indéfiniment non plus, de plus il peut envoyer un "Connection: close".

    Maintenant si ton serveur est HTTP/1.1 et qu'il n'envoie pas automatiquement un "Connection: close" (http://www.w3.org/Protocols/rfc2616/....html#sec14.10), tu peux simplement interrompre ta lecture juste avant la fin, envoyer un nouveau GET et finir de lire. Lorsque tu auras lu entièrement ton image, l'autre réponse arrivera.

    Ou alors tu envoies directement deux requêtes à l'ouverture et ensuite tu lis une réponse et tu renvoies une requête, afin de d'avoir toujours une réponse en attente.

    Bonne journée,
    T.
    Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/

Discussions similaires

  1. Envoyer une requete http avec des sockets
    Par DavidleVrai dans le forum C++
    Réponses: 5
    Dernier message: 20/06/2012, 18h12
  2. Requete http / Connexion socket / Timeout
    Par Harry_Tauper dans le forum Débuter
    Réponses: 8
    Dernier message: 19/10/2009, 11h38
  3. Requete http / Connexion socket / Timeout
    Par Harry_Tauper dans le forum Développement
    Réponses: 0
    Dernier message: 14/10/2009, 11h06
  4. [http] comment faire une requete http
    Par Slimer dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/07/2004, 11h48

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