多进程并发模型--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()