[nc] Perte de connexion après fermeture client
Bonjour,
j'utilise un socket pour envoyer les données météo sur une tablette.
La tablette établit une connexion via un socket puis interroge régulièrement un serveur (raspberry connecté à ma station elle même capable de répondre via quelques commandes).
J'utilise un screen sur le serveur et lance ceci :
Code:
/usr/bin/screen -S meteo -d -m /bin/nc.traditional -l -p 4444 -k -c /usr/local/bin/valeurs
L'objectif est de répondre à chaque demande sans interruption via le script valeurs que voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| #!/bin/bash
password_Utilisateur="xxxx"
password_Admin="xxxx"
units="km/h C mm hPa "
#fonction qui change temporairement les données météo se trouvant dans r2300.txt
remplace () {
sed -i "0,/"$1" /{/"$1" /s#.*#""$2""#}" /usr/local/bin/r2300.txt
}
#Boucle lisant les demandes
while read entree
do
# 5 paramètres envoyés
cmd=$(echo "$entree" | cut -f1 -d" ")
v_param=$(echo "$entree" | cut -f2 -d" ")
reset_param=$(echo "$entree" | cut -f3 -d" ")
categorie=$(echo "$entree" | cut -f4 -d" ")
chaine_begin="$cmd"" ""$v_param"" ""$reset_param"" ""$categorie"" "
password=${entree:${#chaine_begin}}
valeur="$(cat /usr/local/bin/r2300.txt | grep "$v_param " | cut -f2- -d" " )" # valeurs courantes
if [ "$categorie" = "_" ]; then
categorie=""
valeur="0"
fi
# réponses envoyées
case "$cmd" in
"g_values" )
if [ "$password" = "$password_Utilisateur" -o "$password" = "$password_Admin" ]; then
# attends si occupé
while fuser -s /dev/ttyUSB0 ; do
sleep 1
done
cat /usr/local/bin/r2300.txt
else
echo "01"
fi
;;
"g_unites")
if [ "$password" = "$password_Utilisateur" -o "$password" = "$password_Admin" ]; then
# envoie des unités
if [ "$password" = "$password_Admin" ]; then
Bool_Admin="1"
else
Bool_Admin="0"
fi
echo "$units""$Bool_Admin"
else
echo "02"
fi
;;
"g_delete")
if [ "$password" = "$password_Admin" ];
then
# commandes pour effacer certaines données météo
D=$(sed -n 1p /usr/local/bin/r2300.txt | cut -c6-)
T=$(sed -n 2p /usr/local/bin/r2300.txt | cut -c6-10)
minmax2300 "$reset_param" /etc/open2300.conf
remplace "$v_param""$categorie" "$v_param""$categorie ""$valeur"
remplace "T""$v_param""$categorie" "T""$v_param""$categorie ""$T"
remplace "D""$v_param""$categorie" "D""$v_param""$categorie ""$D"
else
echo "03"
fi
;;
*)
echo "03"
;;
esac
done |
Tout n'est peut-être pas à lire mais voici ma question :
Cela fonctionne mais quand je quitte mon application sur la tablette, le script s'arrête et la connexion est perdue.
Voici un des messages d'erreur obtenu :
Code:
1 2 3
| listening on [any] 4444 ...
192.168.0.1: inverse host lookup failed: Unknown host
connect to [192.168.0.6] from (UNKNOWN) [192.168.0.1] 62741 |
J'ai aussi eu aussi :
Code:
read ligne 12 read: read error: 0: Connection reset by peer
Merci de m’éclairer.