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 : Sélectionner tout - Visualiser dans une fenêtre à part
/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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
read  ligne 12   read: read error: 0: Connection reset by peer
Merci de m’éclairer.