多进程并发模型--os.fork()

使用fork完成并发

  【1】 创建套接字,绑定,监听 

  【2】 等待接受客户端连接请求

  【3】创建新的进程处理客户端请求,父进程继续等待连接其他客户端

  【4】 客户端退出对应子进程结束

【osfork-server.py】
from
socket import * import os,sys import signal #创建套接字 HOST = "0.0.0.0" PORT = 8888 ADDR = (HOST,PORT) def client_handler(c): print("Connect from ",c.getpeername()) try: while True: data = c.recv(1024).decode() if not data: break print(data) c.send(b"Receive your message") except (KeyboardInterrupt,SystemExit): sys.exit("退出进程") except Exception as e: print(e) c.close() sys.exit(0) #子进程结束 s = socket() s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) s.bind(ADDR) s.listen(5) print("Parent process wait connect") #对僵尸进程处理 signal.signal(signal.SIGCHLD,signal.SIG_IGN) while True: try: c,addr = s.accept() except KeyboardInterrupt: s.close() sys.exit("服务器退出") except Exception as e: print(e) continue #创建子进程处理客户端请求 pid = os.fork() if pid == 0: s.close() #处理客户端请求 client_handler(c) else: c.close() continue

 

from socket import * 

#创建套接字
sockfd = socket()

#发起连接
sockfd.connect(('127.0.0.1',8888))

while True:
    #消息收发
    msg = input("Msg>>")
    if not msg:
        break
    sockfd.sendall(msg.encode())
    data = sockfd.recv(1024)
    print(data.decode())

sockfd.close()

 

posted @ 2021-01-11 16:14  昱成  阅读(131)  评论(0编辑  收藏  举报