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 confirmé 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
    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
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 461
    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 chevronné Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    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.

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