Отправить вход для ребенка в серверной программе - PullRequest
0 голосов
/ 24 ноября 2018

Я сделал простую серверную программу, которая принимает несколько соединений и ожидает ввода с консоли.Затем предполагается отправить этот вход одному из подключенных клиентов.

Мне нужен способ, чтобы пользователь мог выбрать, на какой клиент отправлять этот вход.Я использую 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...