Mam kod pythona i PHP. W Pythonie klient i serwer i plik php, który z nich korzysta.
#!/usr/bin/python3
# KLIENT cli.py
import socket
import sys
import os
import time
HOST = '' # The remote host
PORT = 50007 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while 1:
try:
s.connect((HOST, PORT))
break
except Exception as e:
os.fork()
os.system("nohup python3 ./serv.py")
time.sleep(1)
s.send(str(sys.argv[1]).encode())
data = s.recv(1024).decode()
s.close()
print(data, end='')
#!/usr/bin/python3
# SERWER serv.py
import sys
import socket
HOST = ''
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
while 1:
conn, addr = s.accept()
data = conn.recv(1024).decode()
if not data: break
try:
conn.send(data + " moje dodatki").encode()) # zamiast stringa jest moja funkcja, która czasem nawala
except Exception as e:
conn.send(str(e).replace("\n", " ").encode())
conn.close()
<?php
$command = './cli.py ' . '"blah"';
$output = shell_exec($command);
?>
<span><?php echo $output; ?></span>
Problem polega na tym, że plik php powinien uruchamiać plik klienta, napisanego w pythonie, i to robi. Klient uruchamia serwer, jeżeli ten będzie nieaktywny. Jednak czasem, jak wystąpi jakiś błąd i serwer się wywali, to nie chce się dalej włączyć, bo twierdzi, że na tym porcie, którego używa, jest już coś uruchomione. Tak jakby serwer się nie do końca wyłączał. Nie wiem czym to jest spowodowane, używam Linux Mint 19.3 ale nie znam się na linuxsie. Proszę o pomoc. Dziękuję.
M.