Dzień dobry.
Mam, po wielu trudach serwer, który się włącza nawet wtedy, gdy wcześniej został zamknięty przez CRTL+Z (Linux). Klient powinien go uruchomić, jeżeli stwierdzi, że nie działa.
Niestety, tak się nie dzieje. Proszę o wskazówkę gdzie może być problem. Klient nawet nie printuje gdy kod printów jest na samej górze kodu. Nie wiem czemu, bo jak serwer działa, to wszystkie printy testowe działają.
Załączam kod:
#!/usr/bin/python3
#KLIENT
import socket
import sys
import os
import time
print("000", end="")
HOST = '' # The remote host
PORT = 50007 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("a", end="")
while 1:
try:
s.connect((HOST, PORT))
print("!", end="")
break
except Exception as e:
os.fork()
os.system("nohup python3 ./serv.py")
time.sleep(2)
param = ""
if 1 < len(sys.argv):
param = str(sys.argv[1])
s.send(param.encode())
data = s.recv(1024).decode()
s.close()
print(data, end='')
#!/usr/bin/python3
# SERWER
import sys
import socket
import subprocess
import re
import os, signal
import time
HOST = ''
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
while 1:
try:
s.bind((HOST, PORT))
break
except Exception as e:
p = subprocess.Popen("lsof -w | grep serv.py | grep IPv4 | grep LISTEN | awk '{print $2}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output, error = p.communicate()
pid = int(re.sub("\n", "", output.decode()))
os.kill(pid, signal.SIGKILL)
time.sleep(1)
s.listen(1)
while 1:
conn, addr = s.accept()
data = conn.recv(1024).decode()
if not data:
conn.close()
break
try:
conn.send((data + "moje dodatki").encode())
except Exception as e:
conn.send(str(e).replace("\n", " ").encode())
conn.close()
Dzięki
M.