Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Serveur web embarqué




  1. #1
    sebastien-begue

    Serveur web embarqué

    Bonjour à tous !

    Je suis actuellement en alternance, et mon 1er projet est de pouvoir établir la communication entre mon ordi et un STM32F2 par liaison ethernet.
    Les stacks que j'utilise sont faites maison ; j'ai validé ttes les couches jusqu'à TCP en IPv4, mais là je bloque pour la partie HTTP : je voulais d'abord savoir s'il était bien possible de n'utiliser que du HTML et du C pour réaliser ceux-ci ?
    Ensuite, si vous avez des exemples/documents qui traitent de ça s'il vous plait ? Je bloque surtout sur la création de la fonction qui va permettre de transformer une demande de fichier par mon client (navigateur internet) en appel de sous-programme.

    Merci beaucoup pour votre aide !

    Dans l'attente de vous lire,


    Cordialement,
    Sébastien.

    -----


  2. Publicité
  3. #2
    galerien69

    Re : Serveur web embarqué

    slt, http c'est un prot de communication, au même titre que ssh ou autre.
    pour faire du http, techniquement, tu as juste besoin d'un langage qui te permette d'encoder le protocole.
    Etant donné que html te permet pas de programmer, tu peux déjà t'en passer.
    Ensuite, http, grossièrement, c'est 4 méthodes dont la plus importante GET (qui demande une page) depuis le client.
    De l'autre côté, tu as le serveur qui écoute sur un port, puis quand il recoit une connexion, il sert la page, si c'est un GET. Rien d'exceptionnel, le plus dur c'est d'écrire ta socket qui écoute sur un port..

    un résumé du protocol http://en.wikipedia.org/wiki/Hyperte...nsfer_Protocol

    Concernant la fonction de transformer une demande de fichier, ca marche comme ca
    client:GET doThat.action
    serveur:if url.match('.action'){if(url==' doThat'){exec('cp -R /bob /home/$USER/toto')}}
    c'est a dire que ton url spécifie une action (un point d'entrée), le serveur utilise un engine (ici, t'appel directement exec, mais tu peux imaginer avoir une API déjà faite en C, ou bien utiliser un engine style php ou n'importe quoi d'autre va lire un script, exécuter le script et te restituer le contenu) puis après toi tu rends tes http headers+le contenu.
    Je pense pas que tu aies besoin que ton serveur supporte toutes les fonctionnalités de http, ni les accept-language et tout

  4. #3
    sebastien-begue

    Re : Serveur web embarqué

    Bonjour !

    Désolé du retard.
    Merci pour toutes vos réponses : en ce moment c'est mon parsage qui ne fonctionne pas bien, car mon serveur web embarqué n'arrive pas à traiter le GET qui lui arrive.
    Aussi, j'ai un problème quand j'essaie d'utiliser telnet en cmd, quand je tape "telnet IP PORT", ça me met transforme ma cmd en écran noir(je passe pas par l'étape où il m'affiche "connected to IP" ), et quand je tape quelque chose ça me met des "_" pour chaque lettre que je tape mais ça ne me répond rien... une idée s'il vous plait ?

    Aussi, je voulais tester le mode client de mon embarqué, mais je ne sais pas si cela est possible s'il vous plait ? ( c'est à dire l'embarqué qui émet une requete genre pour récupérer un fichier html sur mon ordi ).


    Cdt,

    Sébastien.


  5. #4
    galerien69

    Re : Serveur web embarqué

    hello sebastien,

    Tu dis que tu as validé les couches tcp/ip, donc à priori, tu as réussi à tester l'ouverture d'une socket entre le serveur et le client.
    Ca veut dire que tu as du réussi par un moyen ou à un autre à vérifier que les données que tu envoies de la socket vers le serveur sont correctes et que le serveur les réceptionne bien.

    Si c'est pas le cas, tu peux t'arrêter de parser et te concentrer sur la validation de ta couche tcp/ip!
    Si c'est le cas, ben affiches tes char* et regardes ce que tu obtiens.

    après telnet je connais pas trop. je dirais de base, fais ca sur ta machine, ou t'as pas de problème pour tester, puis après hostes ton code en embarqué.

  6. #5
    sebastien-begue

    Re : Serveur web embarqué

    Salut !

    Oui j'ai vérifié le mode server, soit en envoyant une requete de type GET dans un navigateur j'arrivait à récupérer un document html du serveur web embarqué. L'avantage de telnet aurait été que je pouvais envoyer directement les caractères ASCII en ligne de commande, mais bon je reviendrai dessus plus tard car là n'est pas mon réel objectif de projet.

    J'aurais quelques autres questions en reprenant un peu ce que j'ai dit ci-dessus : le mode serveur commence à bien fonctionner, c'est à dire que mon navigateur envoie des GET à mon serveur web embarqué, et j'arrive à afficher des pages html simple (avec du texte à l'intérieur tout simplement) sur mon navigateur.
    Cependant j'aimerai maintenant allumer par exemple mes LEDs via un bouton que je commande au niveau de ma page html : je ne vois pas trop comment interagir avec le materiel quand par exemple on appuie sur un bouton, alors pouvez-vous m'aider là-dessus s'il vous plait ? ( j'avais pensé passer par des "a:active" (mais mes démarches n'allaient pas plus loin), ensuite on m'a orienté vers javascript, même ajax car je ne vais pas pouvoir gérer ça en statique ).

    Merci de votre aide !

    Cdt,
    Sébastien.

  7. A voir en vidéo sur Futura
  8. #6
    sebastien-begue

    Re : Serveur web embarqué

    Bonjour !

    Je suis parti que que sur des GET histoire d'avoir quelque chose de plutôt simple, avec un parsage à chaque fois que je veux allumer/eteindre une LED (genre je passe de "http://IP/ledOn" à "http://IP/ledOff", vu que je n'ai pas encore bien appréhendé tous les concepts de "?", "&", etc...) d'ailleurs auriez-vous des documents/liens qui traiteraient de ceux-ci de manière précise s'il vous plait ?

    Aussi, et surtout, je n'arrive pas à voir comment gérer des requêtes en parallèles côté serveur, donc si vous pouviez m'éclairer un peu là-dessus s'il vous plait ?


    Bien cordialement,
    Sébastien.

  9. #7
    galerien69

    Re : Serveur web embarqué

    re,

    "&" correspond à la concatenation de paramètres. et "?" dit que tous les caractères qui suivent correspondent à des paramètres
    ex: http://ip/led?activeMode=on&power=5v signifie que coté serveur tu t'attends à avoir une variable activeMode dont la valeur est "on", et une variable power dont la valeur est "5v"...

    mais concrètement c'est compliquer pour pas grand chose.
    généralement, comme on t'as conseillé, tu formattes lurl ainsi:
    http://IP/ledOn
    et côté serveur, tu récupères l'url. (via GET), et puis après t'as juste à capturer les derniers caractères.
    genre
    Code:
    string action=url.substring(url.find_last_of('/'), url.size());
    if(action==ledOn){
     monRobot.setLed(1);
    }else if(action==ledOff){
     monRobot.setLed(0);
    }else{
     //blabla
    }
    je n'arrive pas à voir comment gérer des requêtes en parallèles côté serveur,
    pour les requêtes parallèles, tu as deux approches:
    1) pour chaque requete utilisateur, tu fais un thread, et chaque requete est gérée dans son propre thread.
    2) tu sais que ce qui prend du temps, c'est pas l'algorithme, c'est les I/O (genre pe que ton action fait faire un truc au robot et que le robot est super lent ou un truc du genre). Dans ce cas là, tu peux t'inspirer de nodeJs.

  10. Publicité
  11. #8
    sebastien-begue

    Re : Serveur web embarqué

    Bonjour à tous !

    Je n'ai pas de systèmes d'exploitation sur mon embarqué, donc je ne pars pas sur un multitache (trop long pour coder), mais plutot sur le fait de laisser en buffer les connexions entrantes en attendant que celle qui est en cours finisse.

    Aussi, je suis en train d'implémenter un gestionnaire de fichiers (pour la récupération de ceux-ci dans un dossier présent sur l'automate (de mon environnement de travail quoi)) -> j'ai bien les structures associées, mais je n'arrive pas à aller récupérer les fichiers via une fonction C... une idée peut etre ?

    Cordialement,
    Sébastien.

  12. #9
    galerien69

    Re : Serveur web embarqué

    mais je n'arrive pas à aller récupérer les fichiers via une fonction C
    ca veut dire quoi récupérer les fichiers via une fonction C.
    Faire la liste des fichiers, mettre leur contenu en mémoire?

  13. #10
    sebastien-begue

    Re : Serveur web embarqué

    Salut !

    Oui c'est ça ! Que le serveur embarqué soit capable de gérer la récupération de fichiers dans ses dossiers/sous-dossiers et pouvoir les restituer au client navigateur, genre fichier index, dossier gzip, etc ...

    Cdlt,
    Sébastien.

  14. #11
    galerien69

    Re : Serveur web embarqué

    pour que ton browser sache que c'est un fichier à sauvegarder et pas à afficher il faut que tu joues avec le header content-type.
    Typiquement, tu peux lire http://www.w3.org/TR/2008/WD-html5-2...#content-type4 qui définit comment se comporte ton browser vis à vis des headers qu'envoit ton serveur.

    Je mise de mémoire sur application/octet-stream.

Sur le même thème :

Discussions similaires

  1. Choix / Compatibilité serveur physique et serveur virtuel
    Par crokgem dans le forum Internet - Réseau - Sécurité générale
    Réponses: 3
    Dernier message: 31/07/2013, 00h04
  2. Serveur maitre + serveur esclave = 2 licences?
    Par flyingman dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 13/07/2012, 09h57
  3. embarqué
    Par manelfst dans le forum Électronique
    Réponses: 4
    Dernier message: 11/04/2010, 18h37
  4. Embarqué
    Par khalifa_2111 dans le forum Électronique
    Réponses: 0
    Dernier message: 04/07/2008, 08h30