这里只演示os.fork派生子进程
"""
仅仅是演示udp的多进程服务器编程,未使用信号处理函数处理僵死进程
"""
import socket, os
ser = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ser.bind(('10.10.22.101', 10000))
while True:
data, addr = ser.recvfrom(1024)
pid = os.fork()
if pid:
continue
else:
conn = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
"""
这是一行核心代码,具体的理论基础请参见《tcp/ip协议族卷一:协议》
"udp服务器设计这一小节"
"""
conn.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
conn.bind(("10.10.22.101", 1000))
"""
这里直接使用data和addr是有问题的,因为主udp进程返回等待新的udp数据报
新的返回值data和addr可能会覆盖原有的数据,可以采取其他的解决办法
"""
conn.connect(addr)
conn.sendall("OK , you enter: "+data)