インポートソケット
インポートスレッディング
インポートos
from時間インポート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、
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。ここでは、メインプロセスがクライアント接続を閉じ、子プロセスが閉じていることを確認するために、フォークマルチプロセスモジュールが導入されています 。True
:
cli_sock、cli_addr = self.serv.accept()はサーバー接続を閉じ、メインプロセスはゾンビプロセスを制御します。子プロセスは、workのworkインスタンスを呼び出す責任があります。最後に、フォーク爆弾を回避し、子プロセスの完了後に
pid を閉じます= os.fork()
if pid:
cli_sock.close()
while true:
result = os.waitpid(-1、1)[0]
if result == 0:
break
その他:
self.serv.close()
self.tcp_work(cli_sock)
exit()
self.serv.close()
if __name__ == '
__main__ ':## Call Class T = TcptimeServer()
T.tcp_connect()##クラスのインスタンスを呼び出します。関数を完了します。