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 :

HttpListener : comment obtenir les données "brutes" envoyées par le client dans tous les cas ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut HttpListener : comment obtenir les données "brutes" envoyées par le client dans tous les cas ?
    Bonjour à tous

    j'utilise HttpListener pour simuler un serveur HTTP sur mon PC, en local.

    Cela me permet de déboguer un Arduino qui se comporte comme client HTTP

    Concrètement :
    - Le programme dans mon Arduino se connecte au serveur HTTP créé avec HttpListener (j'indique simplement l'adresse IP de mon PC sur le réseau local)
    - Puis le programme dans mon Arduino envoit une requête HTTP
    - Enfin, sur mon PC, mon programme utilise HttpListener pour recevoir la requête et envoyer une réponse (une petite page web)

    Mon programme affiche ce qu'il a reçu et ce qu'il envoit dans des zones de texte, cela me permet de vérifier que tout est OK

    Ca fonctionne

    J'ai optimisé mon code Arduino et j'ai un soucis de mise au point : la requête n'est plus valide mais je ne comprend pas pourquoi...

    J'ai besoin de "voir" exactement les données brutes reçues par HttpListener, ça me permettrais d'en avoir le cœur net

    Or la seule chose que j'arrive à faire avec HttpListener c'est :
    - obtenir les headers (la liste de toutes les values pour chacune des keys)
    - obtenir URLRequestClient

    C'est utile mais ce sont des données "retravaillées" par HttpListener

    Ce qui est emmerdant c'est que lorsque la requête n'est pas correcte, HttpListener répond à mon Arduino une réponse avec un code d'erreur HTTP mais mon programme sur le PC ne voit rien et n'affiche rien !

    J'ai vraiment besoin de voir exactement ce que mon client web Arduino a envoyé comme données au serveur même (et surtout) quand c'est pas bon, pour que je puisse comprendre où se trouve le bug.

    Comment faire ça avec HttpListener ?

    Faut-il utiliser autre chose de plus "bas niveau" ?

    Ou sinon, avec un logiciel de monitoring réseau qui me permet de "capturer" les requêtes et les réponses ?

    Merci

    A bientôt

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 199
    Par défaut
    tcplistener
    http est une norme utilisant le protocole tcp
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Bonjour,

    Oui il te suffit d'utiliser Wireshark pour voir ce qui entre et sort au niveau réseau (ou un autre logiciel mais il reste une référence, tout en étant gratuit). Tu pourras alors voir en claire tes requêtes et détecter ce qui coince.

    En ce qui concerne une technologie plus bas niveau, il y a bien TcpListener mais ça serait peut-être un overkill, il me semble que rester avec le protocole HTTP soit largement suffisant pour ce que tu cherches à faire. En plus avec les headers tu peux avoir un semblant de structure de données sans te prendre la tête de ce côté là.

  4. #4
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Bonjour,

    Très intéressant tout ça, je vais regarder...

    Les entêtes des requêtes et des réponses HTTP sont un peu lourdes.

    Dans le projet final, il y a plusieurs Arduino Clients qui communiquent avec un Arduino Serveur
    L'Arduino Server doit pouvoir communiquer en plus avec le navigateur d'un ordinateur, le navigateur d'un smartphone et un Raspberry Pi (configuré en lecteur MP3 avec Rune Audio) sur le réseau local

    Pour la communication entre les Arduinos Clients et l'Arduino Server, je vais peut être "simplifier" les échanges et échanger des données brutes sans entêtes ni code HTML.
    Que je puisse avec mon ordinateur analyser directement ce qu'il se passe au niveau TCP/IP rendra l'analyse de ces échanges "non conventionnels" possible.

    Merci

    A bientôt

  5. #5
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Bonjour,

    Wireshark est pratique, il affiche beaucoup de choses mais le choix des couleurs et la présentation permet de s'y retrouver

    Le menu Capture -> Option propose la résolution de nom (on affiche le nom des machines au lieu de leur IP) ce qui rend les échanges plus lisibles

    J'ai pu comprendre ce qu'il se passe et résoudre mon problème.

    J'ai pu découvrir que mon Arduino Client envoie sa requête de façon étrange :
    - le début avec un paquet de longueur 16
    - tout le reste sous forme de paquets avec un seul octet (lettre par lettre)
    Et ça ne vient pas de mon code, j'envoie ma requête d'un seul coup sous forme de buffer avec la fonction client.print() de la bibliothèque.
    Le rendement est médiocre, car chaque trame mesure mesure 54 à 60 octets !

    Le serveur fait en VB.NET avec HttpListener envoie toutes les données d'un coup (réponse HTTP + page web)

    Je ne sais pas si c'est normal, en tout cas entre l’envoi de la requête et la réception du dernier octet de la page web envoyé par le serveur il ne se passe que 23 millisecondes, donc ce n'est pas gênant

    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Comment obtenir les données d'un thread
    Par BasicZX81 dans le forum VB.NET
    Réponses: 3
    Dernier message: 06/02/2014, 20h27
  2. Réponses: 6
    Dernier message: 26/04/2012, 07h42
  3. comment obtenir les données d'un dataform? +childwindow
    Par dhay06 dans le forum Silverlight
    Réponses: 8
    Dernier message: 04/06/2010, 12h20
  4. Réponses: 4
    Dernier message: 23/09/2008, 18h40
  5. Réponses: 6
    Dernier message: 31/03/2008, 11h10

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