将输入发送给服务器程序中的子程序

时间:2018-11-24 20:11:57

标签: python-3.x sockets server

我制作了一个简单的服务器程序,该程序接受多个连接并等待来自控制台的输入。然后,它打算将此输入发送到已连接的客户端之一。

我需要一种让用户选择将输入发送给哪个客户端的方法。我正在使用os.fork()来生成子代来处理连接,并且正在使用管道向它们发送数据。我只需要一种方法让用户选择要将数据发送到哪个孩子,同时也将数据从其他孩子输出到屏幕。

我本来是想更改孩子的stdin并将数据分别输入到孩子进程的,但似乎有点复杂,甚至是不可能的。

有没有简单的方法可以做到这一点?最好没有外部库。

编辑:到目前为止的代码:

# 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

我在代码中还有很多事情要做,但是我需要弄清楚大多数代码是如何做到的。

0 个答案:

没有答案