Socket_Fork

 
 1 #!/usr/bin/env python
 2 #coding=utf-8
 3
 4 #完整的多进程服务器模型
 5 import os,sys
 6 from socket import socket,AF_INET,SOCK_STREAM,SOL_SOCKET,SO_REUSEADDR
 7 def reaping():
 8     while 1:
 9         try:
10             deadprocess = os.waitpid(-1,WNOHANG)
11             if not deadprocess[0]:break
12         except:
13             print "\033[31;1mNo Zombie Process!!!\033[0m"
14             break
15         ‘‘‘没有遇到except,有僵尸进程!!‘‘‘
16         print "\033[32;1mZombie Process: %s is reaped!!!\033[0m"
17
18
19
20 def socket_server(host,port):
21     s = socket(AF_INET,SOCK_STREAM)
22     s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
23     s.bind((host,port))
24     s.listen(5)
25     return s
26
27
28 def client_handler(c_socket):
29     while True:
30         data = c_socket.recv(1024)
31         print "Recv From:%s, data:[%s]" %(c_socket.getpeername()[0],data.strip())
32         ACK = "Server ACK,data:[%s],data_length:[%s]\n" %(data.strip(),len(data))
33         c_socket.send(ACK)
34         if not data or data.strip()=="quit":
35             break
36
37     c_socket.close()
38     os._exit(0)
39
40
41 #Main
42 Host = "0.0.0.0"
43 Port = 12345
44 server = socket_server(Host,Port)
45
46 print "\033[31;1mServer is waiting for the connection from client...\033[0m"
47 while True:
48     try:
49         sock,addr = server.accept()
50     except KeyboardInterrupt:
51         print "Server Ending ...."
52         sys.exit()
53     except:
54         print "Error occured"
55         sys.exit()
56 #Before generate new process, scanning zombie process
57     reaping()
58     pid = os.fork()
59     if pid:
60         """parent process,must close the client socket"""
61         sock.close()
62         continue
63     else:
64         """child process,must close the server socket"""
65         server.close()
66         print "\033[32;1mClient:[%s:%s] is connected!!\033[0m" %(addr[0],addr[1])
67         client_handler(sock)
时间: 2024-08-03 02:55:31

Socket_Fork的相关文章