Estou usando o Ubuntu Mate em meu raspberry pi3, estou tentando fazer uma conexão de soquete cliente-servidor usando python, o script de cliente deve ser executado toda vez que o raspberry pi for inicializado e o script também deve ser executado para sempre.
Aqui está o meu código de cliente
import socket
import sys
import urllib.request
import time
import datetime
TCP_IP = sys.argv[1]
TCP_PORT = int(sys.argv[2])
BUFFER_SIZE = 1024
MESSAGE = "response"
flag = 0
def func():
try:
global flag
flag = 1
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Socket Created")
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE.encode())
print("Sent 'response' message to server")
while True:
data = s.recv(BUFFER_SIZE)
if not data:
raise Exception('This is the exception you expect to handle')
reply = data.decode().strip()
print(reply)
li = reply.split(",")
if len(li) == 2:
r = urllib.request.urlopen("http://127.0.0.1/sm.php?set=" + li[0] + "&device=" + li[1])
else:
s.send("received to client".encode())
except Exception as e:
now = datetime.datetime.now()
stamp = now.strftime("%Y-%m-%d %H:%M:%S")
with open("/home/mohit/ML/client_error.txt", "a") as myfile:
myfile.write(str(e) + " " + str(stamp)+"\n")
print(str(e))
time.sleep(10)
s.close()
s.detach()
flag = 0
return
while True:
if flag == 0:
func()
s.close()
Para iniciar o script quando o Ubuntu for inicializado, eu o adicionei em /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
python3 /home/mohit/ML/Server.py &
sleep 60
python3 /home/mohit/ML/ClientSocket.py xx.xx.xx.xx xxportxx &
exit 0
Após a inicialização, o arquivo ClientSocket.py é executado por algum tempo e, em seguida, o arquivo para de executar, para fins de teste, executei o arquivo ClientSocket.py manualmente em um terminal eo arquivo foi executado corretamente nesse caso. Não consigo entender por que o arquivo python para de executar sozinho.