Я создаю Python-сервер для некоторых приложений, работающих на разных компьютерах в доме. Для этого я пытаюсь настроить сервер, отвечающий на команды из любого из этих приложений. Коммутатор сокета работает адекватно, и Python указывает, что команда выполнена, но нет никаких изменений в переменных, которые я ожидал бы изменить.
Я тестирую на Python 3.7.
import sys
import time
import socket
data = "";
result = "";
def server():
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
while 1:
data = conn.recv(BUFFER_SIZE).decode()
if (len(data)>0):
try:
exec(data);
print("Execution OK of "+data+", result: "+result);
conn.send(result.encode()) # send the final value back to the client
except Exception as e:
print("Error executing: ",data, " msg: ",str(e));
else:
time.sleep(1);
result = "UNINITIALIZED"
server()
Чтобы проверить это, я запускаю следующие команды из другой консоли Python:
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = "result='initialized'";
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE.encode())
data = s.recv(BUFFER_SIZE).decode()
s.close()
print("received data:", data)
Я ожидаю, что после того, как сервер получит данные (что работает нормально), значение «result» должно измениться на «initialized», и я увижу обновленное значение как на сервере, так и в ответе, возвращаемом обратно клиенту. В обоих случаях «result» сохраняет исходное значение «UNINITIALIZED».
Заранее спасибо!