Comprendre la gestion du socket de ESP32Forth
publication: 14 mars 2022 / mis à jour 14 août 2022
Appel à collaboration
Vous développez des montages, simples ou complexes avec ESP32 et ESP32forth.
Partagez-les ici sur ce site.
ESP32forth ne pourra se développer qu'avec la collaboration active de toutes les bonnes volontés.
Vos montages peuvent aider d'autres développeurs.
Les montages des autres développeurs peuvent vous aider.
Pour proposer un article ou un montage, cliquez ici
Prérequis
Avant de gérer une connexion, il faut établir une liaison réseau. La carte ESP32 dispose d'un interface WiFi.
Pour établir une laison Wifi, il faut:
- avoir un modem/routeur qui gère les liaisons en WiFi
- disposer du SSID de port WiFi disponible et de sa clé d'accès
La connexion au réseau est assurée par le mot login
:
\ connection to local WiFi LAN : myWiFiConnect ( -- ) z" Mariloo" z" 1925144D91DE5373C3XXXXXXXX" login ;
L'exécution de myWiFiConnect
affiche:
--> myWiFiConnect 192.168.1.8 MDNS started
Gestion du socket
Tous les mots de gestion du socket sont défini dans le vocabulaire sockets
.
Contenu de ce vocabulaire (ESP32forth v7.0.7.2):
ip. ip# ->h_addr ->addr! ->addr@ ->port! ->port@ sockaddr l, s, bs, SO_REUSEADDR SOL_SOCKET sizeof(sockaddr_in) AF_INET SOCK_RAW SOCK_DGRAM SOCK_STREAM socket setsockopt bind listen connect sockaccept select poll send sendto sendmsg recv recvfrom recvmsg gethostbyname errno sockets-builtins
socket
Le mot socket
crée un point de communication et retourne une instance de connexion.
socket
utilise trois paramètres:
- domaine spécifie la famille de protocoles à utiliser par le socket:
AF_INET
protocole basé sur IPv4. TCP et UDP sont les protocoles communs de cette famille de protocoles
- type sélectionne le type de communication à utiliser par le socket:
SOCK_STREAM
fournit des flux d'octets ordonnancés, fiables, full-duplex, raccordés sur la base. Un mécanisme de transmission des données "out-of-band" peut être supporté. Le protocole TCP est basé sur ce type de sockets
- protocole définit le protocole spécifique pour le domaine domain à utiliser lors de communications sur un socket retourné. Par défaut 0.
socket
retourne un descripteur qu'il faut enregistrer. Ce descripteur devra être utilisé dans
toutes les transmissions utilisant ce socket. Exemple:
\ define own socket pointer 0 value mySock WiFi also sockets \ select sockets vocabulary : noWiFi ( -- ) ." WiFi not connected " ; \ initialise own socket : initMySocket ( -- ) ['] noWiFi catch WiFi.localIP 0= throw AF_INET \ family SOCK_STREAM \ type 0 \ protocol socket \ return integer or -1 (error) to mySock \ store result in mySock ;
bind
Lie le nom donné par address à l'interface de connexion décrite par socket
.
Ceci doit être effectué avant qu'une connexion ne soit établie en utilisant
connect
ou listen
.
- socket instance de Socket créée par
socket
; - address si le socket est de la famille
AF_INET
, le paramètre address est une IP numérique (i.e. 127.0.0.1); - port paramètre uniquement utilisé lors de la liaison à un socket
AF_INET
et désigne le port sur lequel écouter pour une connexion.
connect
gethostbyname
Récupère une adresse hostent à partir du nom de domaine:
sockets : getHostIp ( hostNameZ -- ) s>z dup >r gethostbyname ?dup if cr ." - addr IP: " r@ z>s type ->h_addr ip. else cr ." UNABLE ACCESS: " r@ z>s type then rdrop ; s" xxx-fth.com" getHostIp \ display: UNABLE ACCESS: xxx-fth.com s" esp32-forth.com" getHostIp \ display: esp32-forth.comaddr IP: 213.186.33.5
listen
Une fois le socket créé avec socket
et lié à un nom avec bind
il peut être mis en attente de la connexion entrante.
errno
Récupère la dernière erreur générée par un socket.
Legal: site web personnel sans commerce / personal site without seling