Comprendre la gestion du socket de ESP32Forth

publication: 14 mars 2022 / mis à jour 14 août 2022

Read this page in english

 


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:

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:

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.

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