February 27, 2022

Управляем дедиком через socket. Python

Перейдем сразу к делу.

Напишем серверную часть

Импортируем библиотеки socket и subprocess

import socket
import subprocess

Создадим сокет.

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

socket.AF_INET — для сокета используем IPv4
socket.SOCK_DGRAM — тип сокета

Связываем сокет с айпи дедиком и портом

sock.bind (('айпи дедика',5050))

Создадим переменную в которой будут хранить подключенные юзеры (Если у вас несколько устройств)

client = []

Напишем в консоль, что сервер запущен

print("Server started!")

Начнем принимать все входящие сообщения и подключения

data , addres = sock.recvfrom(1024)

Выполняем присланную команду

result = subprocess.run(data, shell = True,

stdout=subprocess.PIPE,

stderr=subprocess.PIPE,

stdin=subprocess.PIPE,

encoding='utf-8')

Если команда выполнена удачно, отправляем результат в байтах

if result.returncode == 0:

data = result.stdout.encode('utf-8')

Если не выполнилась, то отправляем ошибку

else:

r = result.stderr.split(":")[2:]

rs = "".join(r)

data = rs[1:].encode('utf-8')

Если подключенного юзера нет в списке, то добавляем

if addres not in client :

client.append(addres)

Отправляем весь результат юзеру

for clients in client :

sock.sendto(data,clients)

Весь код

Пишем клиентскую часть

Импортируем библиотеку socket и threading

import socket

import threading

Функция для получения сообщений от сервера

def read_sok():

while 1 :

data = sor.recv(1024)

print(data.decode('utf-8'))

Создадим переменную для подключения (ip, port)

server = 'айпи дедика', 5050

Создадим сокет

sor = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

Задаем сокет, как клиент

sor.bind(('', 0))

Подключим многопоточность

potok = threading.Thread(target= read_sok)

potok.start()

Отправляем команду на дедик

while 1:

mensahe = input()

sor.sendto((mensahe).encode('utf-8'), server)

Весь код

Результат работы (Слева сервер, справа клиент):