import socket
import threading
import os
from time import strftime
class TcptimeServer: ##定义一个名为TcpTimeServer的类。里面定义好类的基础属性
def __init__(self, host='', port=21567):
self.addr = (host, port)
self.serv = socket.socket()
self.serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.serv.bind(self.addr)
self.serv.listen(2)
def tcp_work(self, cli_sock): ##创建一个实例。tcp_work,用于执行接收、发送数据的操作
while True:
rdata = cli_sock.recv(1024)
rdata = rdata.decode('utf8')
if rdata.strip() == 'quit':
break
print(rdata.strip())
sdata = '[%s] %s' % (strftime('%H:%S:%M'), rdata)
cli_sock.send(sdata.encode('utf8'))
cli_sock.close()
def tcp_connect(self): ##创建一个实例.tcp_connect,用于服务端等待客户端的连接。这里引入fork多进程的 模块,判断主进程关闭客户端连接,子进程关
while True:
cli_sock, cli_addr = self.serv.accept() 闭服务端的连接,主进程负责控制僵尸进程。子进程负责调用work实例进行工 作。最后避免fork炸弹,子进程工作完成后关闭
pid = os.fork()
if pid:
cli_sock.close()
while True:
result = os.waitpid(-1, 1)[0]
if result == 0:
break
else:
self.serv.close()
self.tcp_work(cli_sock)
exit()
self.serv.close()
if __name__ == '__main__': ##调用类
T = TcptimeServer()
T.tcp_connect() ##调用类中的实例。完成功能。