Блокировка другого компьютера с помощью сокетов без прерывания соединения - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь настроить сервер, который может отправлять каждому клиенту команды.
Одной из команд является «блокировка», которая блокирует экран клиента.
Когда клиент получает слово «блокировка», он запускаетсяэтот код на клиенте:

import ctypes
ctypes.windll.user32.LockWorkStation()

Этот код блокирует экран, однако он разрывает мое соединение с клиентом ..
Как я могу сделать так, чтобы клиент оставался подключенным, но все еще заблокированным?

Примечание: блокировка не вечна!это всего лишь один раз, как перевод компьютера клиента в спящий режим до тех пор, пока он не захочет разблокировать экран.

Надеюсь, я был достаточно ясен.Спасибо за помощь!

Сервер:

import socket

def main():

    sock = socket.socket()
    sock.bind(('0.0.0.0', 4582))
    print("Waiting for connections...")
    sock.listen(1)
    conn, addr = sock.accept()
    print ("New connection from: ", addr)

    while 1:
        command = input("Enter command> ")


        if command == 'shutdown':
            sock.send(b'shutdown')
        elif command == 'lock':
            sock.send(b'lock')
        else:
            print ("Unknown command")

        data = sock.recv(1024)
        print (data)

if __name__ == '__main__':
    main()

Клиент:

import socket
import ctypes


def main():

    sock = socket.socket()
    sock.connect(('127.0.0.1', 4582))


    while 1:

        data = sock.recv(1024)
        print (data)

        if data == 'lock':
            sock.send(b'locking')
            ctypes.windll.user32.LockWorkStation()

        sock.recv(1024)


if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 29 декабря 2018

Я адаптировал пример из Python docs для ваших нужд.

Пример для server.py:

import socket

HOST = '127.0.0.1'
PORT = 4582

with socket.socket() as s:
    print('Waiting for connection...')
    s.bind((HOST, PORT))
    s.listen(1)
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = input('Which command? ')
            if data in ['lock', 'shutdown']:
                conn.send(data.encode())
            else:
                print('Command unknown')

Пример для client.py:

import ctypes
import socket

HOST = '127.0.0.1'
PORT = 4582

with socket.socket() as s:
    s.connect((HOST, PORT))
    while True:
        data = s.recv(1024).decode()
        if not data:
            print('Server disconnected')
            break
        print('Received command:', data)
        if data == 'shutdown':
            print('Shutting down client...')
            break
        if data == 'lock':
            print('Locking...')
            ctypes.windll.user32.LockWorkStation()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...