Bonjour,

Je vous écris pour un besoin très particulier...

J'aimerais trouver comment simuler un serveur web avec VB.NET

Des logiciels existent (Wamp64, EASYPHP, UWAMP, Caddy...) mais ils ne seront pas adaptés à ce que j'ai besoin de faire.

Je suis en train de mettre au point un système domotique qui comporte :
- des modules Arduino qui fonctionnent en client web, ces modules sont associés à un écran tactile TFT
- un module Arduino "central" qui fonctionne en serveur web, ce module sera associé à des capteurs et des actionneurs
Tout ce beau monde est relié ensemble avec des câbles Ethernet sur un routeur

Ca va être très fastidieux, à chaque étape du développement, de mettre à jour l'Arduino client puis l'Arduino serveur

C'est pour cela que je cherche à simuler un serveur web sur mon PC avec VB.NET
Cela me permet de mettre au point le client Arduino, ensuite il me restera à porter mon code VB.NET sur l'Arduino serveur

Les clients Arduino vont envoyer des requêtes HTTP au serveur avec des paramètres dans la requête après le caractère ? (comme le ferait un client web "normal" avec un formulaire)
Le serveur Arduino, que je souhaite émuler en VB.NET pour la mise au point, va, en fonction de la requête, envoyer une page web au client.
Les Arduino ont très peu de ressources : 32Ko de ROM, 2Ko de RAM... la page web sera minimale, avec juste les informations nécessaires.
En revanche, si c'est un navigateur classique qui émet la requête (navigateur d'un PC ou d'un smartphone relié à mon réseau local), la page web envoyée sera une vraie page web avec un formulaire permettant à l'utilisateur de piloter le système

L'Arduino utilisé en serveur est un modèle plus "puissant", doté de 256ko de ROM et 8ko de RAM, de quoi faire rêver les fan de tunning informatique

Paradoxalement, c'est le client qui demandera le plus de travail de développement, car :
- la gestion de l'écran tactile TFT est lourde
- 2/3 de la ROM sont déjà occupé par les bibliothèques servant à gérer le module Ethernet, l'écran tactile et les routines d'initialisation
Le code dans les Arduinos clients devra donc être soigneusement optimisé.
L'Arduino utilisé en serveur n'a pas à gérer d'écran tactile et il possède beaucoup plus de ROM. Paradoxalement, le serveur aura moins de travail... Pourquoi donc avoir pris un Arduino plus puissant ? Tout simplement parce que le modèle plus puissant a aussi beaucoup plus de broches d'entrée/sorties et c'était nécessaire étant donné le nombre de relais bistables et de capteurs que je devrais piloter.
C'est pour cela que je dois mettre au point d'abord les clients, le serveur s'adaptera.

Il y a un petit problème : mon programme en VB.NET devra simuler un serveur qui devra être accessible avec une adresse IP depuis les appareils connectés sur mon réseau local...
Il ne faut pas que le "serveur virtuel" fait en VB.NET soit accessible seulement sur l'ordinateur où il s'éxecute

Je ne sais même pas si c'est faisable.

A noter que mon PC est relié à un routeur 16 ports sur lequel seront reliés les Arduinos ; ce routeur est aussi relié à ma Freebox révolution.
Mon PC et les Arduinos ont tous des IP fixes.
La Freebox Revolution offre pas mal de réglages.

Oui je sais, des demandes comme celles-là vous en voyez pas tous les jours

Qu'en pensez-vous ?

NB : j'ai posté un sujet sur le forum Arduino (https://www.developpez.net/forums/d2.../#post11586152), mais compte tenu de la nature de la demande il m'a semblé plus pertinent de faire un sujet ici également

NB : Avec VB.NET, j'ai déjà simulé un client web pour me connecter à un Arduino NANO ESP Wifi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Imports System.Net
Public Class FrmPrincipale
    Private Sub But_Lancer_Click(sender As Object, e As EventArgs) Handles But_Lancer.Click
        Dim WB As MyWebClient
        Try
            WB = New MyWebClient
            WB.Headers.Add(Net.HttpRequestHeader.Accept, "text/html")
            WB.Headers.Add("user-agent", "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Safari/537.36")
            TxtResultat.Text = WB.DownloadString(TxtUrl.Text)
        Catch ex As Exception
            TxtResultat.Text = ex.ToString
        End Try
    End Sub
    'Explication donnée sur https://docs.microsoft.com/fr-fr/powerapps/developer/common-data-service/best-practices/business-logic/set-keepalive-false-interacting-external-hosts-plugin
    Friend Class MyWebClient
        Inherits WebClient
        Protected Overrides Function GetWebRequest(ByVal address As Uri) As WebRequest
            Dim req As HttpWebRequest = CType(MyBase.GetWebRequest(address), HttpWebRequest)
            req.KeepAlive = False
            Return req
        End Function
    End Class
End Class