1. 程式人生 > 實用技巧 >多程序併發模型--os.fork()

多程序併發模型--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()