- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- # -----------------------------------
- # @CreateTime : 2020/3/2 13:43
- # @Author : WaterIce
- # [url=home.php?mod=space&uid=43506]@Email[/url] : [email protected]
- # @Version : 1.0
- # @File : tcp.py
- # @Desc :
- # ------------------------------------
- import threading
- import socket
- encoding = 'utf-8'
- BUFSIZE = 1024
- # a read thread, read data from remote
- class Reader(threading.Thread):
- def __init__(self, client):
- threading.Thread.__init__(self)
- self.client = client
- def run(self):
- while True:
- data = self.client.recv(BUFSIZE)
- if (data):
- string = bytes.decode(data, encoding)
- print(string, end='')
- else:
- break
- print("close:", self.client.getpeername())
- def readline(self):
- rec = self.inputs.readline()
- if rec:
- string = bytes.decode(rec, encoding)
- if len(string) > 2:
- string = string[0:-2]
- else:
- string = ' '
- else:
- string = False
- return string
- # a listen thread, listen remote connect
- # when a remote machine request to connect, it will create a read thread to handle
- class Listener(threading.Thread):
- def __init__(self, port):
- threading.Thread.__init__(self)
- self.port = port
- self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- self.sock.bind(("0.0.0.0", port))
- self.sock.listen(0)
- def run(self):
- print("listener started")
- while True:
- client, cltadd = self.sock.accept()
- Reader(client).start()
- cltadd = cltadd
- print("accept a connect")
- lst = Listener(443) # create a listen thread
- lst.start() # then start
复制代码 |