Sockets réseaux

Une seule connexion possible. Ensuite, disparait.

TBD Faire en shell avec nc TBD Faire en C :

  • client time ?
  • client serveur

TBD limité à 1 connection. En avoir plusieurs possible avec un fork. Le faire

Connexion internet

socket Client / serveur

la commande nc permet d'établir une connexion TCP à un serveur ou de créer un serveur.

Serveur :

nc -l -p 9090 127.0.0.1

Client (dans un autre terminal) :

nc 127.0.0.1 9090

Les stdin/out sont liés.

Nc n'admet qu'une connexion. Pour créer un serveur acceptant plusieurs client, il faut utiliser une autre commande : socat :

#! /bin/sh

socat tcp-listen:9090,fork,reuseaddr \
'system:

echo "Le serveur écoute."

while read CLIENT_MESSAGE; do
  echo "le serveur répond : $CLIENT_MESSAGE"
done
'

outil de connexion

echo serveur

#! /bin/sh

if [ -z "$1" ]; then 
    PORT=9090
else
    PORT=$1
fi

socat tcp-listen:$PORT,fork,reuseaddr \
'system:

echo "Le serveur écoute."

while read CLIENT_MESSAGE; do
  echo "le serveur répond : $CLIENT_MESSAGE"
done
'

mono ligne

PORT=9090; socat tcp-listen:$PORT,fork,reuseaddr 'system: while read CLIENT_MESSAGE; do echo "le serveur répond : $CLIENT_MESSAGE"; done'

echo à tous serveur

#! /bin/sh

rm /tmp/pns_* 2>/dev/null

if [ -z "$1" ]; then
    PORT=9090
else
    PORT=$1
fi

socat tcp-listen:$PORT,fork,reuseaddr \
'system:

PIPE=$(mktemp -u /tmp/pns_XXX)
ME=$(echo $PIPE | sed 's:/tmp/pns_::')
mkfifo $PIPE

while read PIPE_MESSAGE<$PIPE; do
  echo $PIPE_MESSAGE
done &
PID=$!

echo "je suis : $ME"
for EACH_PIPE in $(ls /tmp/pns_*); do
   [ $PIPE != $EACH_PIPE ] &&  echo "$ME est connecté" > $EACH_PIPE
done

while read CLIENT_MESSAGE; do
  for EACH_PIPE in $(ls /tmp/pns_*); do
    echo "Message de $ME : $CLIENT_MESSAGE" > $EACH_PIPE
  done
done
kill $PID
rm $PIPE
'

client

Avec socat :

socat - TCP4:localhost:9090

Avec nc :

nc localhost 9090

web server avec python/socat

python -m http.serveur 8080

TBD en écrire un.

https://dev.to/leandronsp/building-a-web-server-in-bash-part-ii-parsing-http-14kg

https://fazlearefin.blogspot.com/2021/05/http-and-https-simple-web-server-using.html

bibliographie

client serveur

  1. socat : un serveur en shell qui répond à un protocole simple :
    1. répond hello à hello
    2. donne l'heure
    3. envoie un fichier s'il existe
  2. node/express, flask, fastAPI :
    1. route index.html redirection vers /static/index.html
    2. une route qui calcule une somme
    3. un site static simple
    4. un js dedans qui appelle la fonction à calculer avec un /api/calcul
  3. deux route en hop. Ramener le port 9090 de roucas sur localhost en suivant la route : localhost <-> ovh <-> sas1 <-> roucas101.

tbd

en python : https://www.youtube.com/watch?v=Ftg8fjY_YWU

https://www.geeksforgeeks.org/how-to-kill-a-detached-screen-session-in-linux/

cours web

remplacer screen par tmux.

Utiliser un shell que l'on sauve. Comme ça on peut y revenir, par exemple si virtualenv.

faire un exemple complet avec virtualenv

faire plusieurs petits serveurs avec :