Необходимо принять инструкции по отключению через сокет - PullRequest
0 голосов
/ 16 апреля 2020

Я установил соединение от клиента к серверу через сокет на указанном порту. Клиент и сервер могут нормально общаться. Хотите иметь возможность выключить клиент с сервера. У меня есть следующий код:

def handle_client(client_socket):

    query = client_socket.recv(1024)

    print ("Received the following: %s") % query

if query == 'shutdown':
   os.system("shutdown now -h") #shutdown host

else:
   client_socket.close() #shuts down client

Я запускаю это, и я получаю сообщение об ошибке, что запрос не определен.

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2020

Я думаю, что есть проблема с вашим отступом. как вы знаете, python чувствителен к отступам.

должно быть так:

def handle_client(client_socket):

    query = client_socket.recv(1024)
    print ("Received the following: %s") % query

    if query == 'shutdown':
        os.system("shutdown now -h") #shutdown host
    else:
        client_socket.close() #shuts down client
0 голосов
/ 17 апреля 2020

Спасибо! Это похоже на работу.

Однако, если я пытаюсь отправить файл с рабочего стола обратно клиенту, у меня не получается выполнить следующее:

if query == 'get file':
    client_socket.send("/home/root/Desktop/file.txt") #sends a file called file.txt
else:
    client_socket.close() #shuts down client

Я ценю любую помощь.

0 голосов
/ 16 апреля 2020

Вы должны определить запрос как глобальную переменную, чтобы к нему можно было обращаться за пределами функции handle_client. Сделайте это:

def handle_client(client_socket):
    global query ##define it as a global variable

    query = client_socket.recv(1024)

    print ("Received the following: %s" %(query)) ##also, the % operator needs to be inside the print statement

if query == 'shutdown':
   os.system("shutdown now -h")

else:
   client_socket.close()
...