我制作了一个简单的服务器程序,该程序接受多个连接并等待来自控制台的输入。然后,它打算将此输入发送到已连接的客户端之一。
我需要一种让用户选择将输入发送给哪个客户端的方法。我正在使用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
我在代码中还有很多事情要做,但是我需要弄清楚大多数代码是如何做到的。