Я сделал простую серверную программу, которая принимает несколько соединений и ожидает ввода с консоли.Затем предполагается отправить этот вход одному из подключенных клиентов.
Мне нужен способ, чтобы пользователь мог выбрать, на какой клиент отправлять этот вход.Я использую os.fork()
, чтобы порождать детей для обработки соединений, и я использую каналы для отправки данных им.Мне просто нужен способ, позволяющий пользователю выбирать, в какой дочерний элемент отправлять данные, а также выводить данные на экран от других дочерних элементов.
Первоначально я думал о смене стандартного дочернего элемента и вводе данных в дочерний процесс отдельно, но это казалось немного сложным и, возможно, даже невозможным.
Есть ли какой-нибудь простой способ добиться этого?Желательно без внешних библиотек.
РЕДАКТИРОВАТЬ: Код до сих пор:
# Imports
import socket,json,os,signal,select
# Settings
CONTROL_PORT = 12345
# Variables
pipes = {}
# Functions
def send(conn,data):
conn.send(json.dumps(data))
def recv(conn,buffer=4096):
return json.loads(conn.recv(buffer))
def handleClient(conn,addr):
print("[+] Started {} to handle conn from {}.".format(os.getpid(),addr[0]))
# Some simple handshake to verify client \ ___
# Loop for receiving and sending data / To Do List
# Body
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("0.0.0.0", CONTROL_PORT))
sock.listen(5)
print("[+] Control Server successfully started. Awaiting connections on {}".format(CONTROL_PORT))
pipe_id = 1
while True:
conn,addr=sock.accept()
pipes[pipe_id] = [os.pipe()]
pid = os.fork()
if pid = 0:
sock.close()
handleClient(conn,addr)
os._exit(0)
else:
pipe_id += 1
# Also finish main loop
У меня еще много вещей, которые нужно закончить в коде, но мне нужно выяснить, как это сделать в первую очередь для большинства из них.