服务端代码 ''' name: Server End author: xyxc0673 created_at: 2018-7-26 ''' import socket import logging import threading class TcpServer: def __init__(self, host, port): # TCP socket config self.host = host self.port = port self.addr = (self.host, self.port) # logging config logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') self.logger = logging.getLogger(__name__) def log(self, message): self.logger.info(message) def listen(self, backlog=5): self.log(f'Server is starting to listen on {self.host}:{self.port}.') self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # socket.AF_INET: ipv4, socket.SOCK_STREAM: tcp self.socket.bind(self.addr) self.socket.listen(backlog) self.log(f'Server is listening with the backlog of {backlog}.') def handler(self, socket, addr): ''' handle message from connection ''' host, port = addr self.log(f'Function handler() for {host}:{port} is on.') socket.send(b'Weclome to The WORLD.') while True: data = socket.recv(1024) # bufsize 1024 means to the max recevied data length data_decoded = data.decode('utf-8') # recved data is bytes-like. self.log(f'Received {data_decoded} from {host}:{port}') # connection closes if message is 'exit' if data_decoded == "exit": socket.send(b'exited') break socket.sendall(f'Message receved: {data_decoded}'.encode('utf-8')) socket.close() self.log(f'Connection from {host}:{port} closed.') def run(self): while True: socket, addr = self.socket.accept() self.log(f'Client {addr[0]}:{addr[1]} is accepted.') th = threading.Thread(target=self.handler, args=(socket, addr)) # start a new thread to handle new connection th.start() if __name__ == "__main__": host = '127.0.0.1' port = 31500 server = TcpServer(host, port) server.listen() server.run() 客户端代码 ''' name: Client End author: xyxc0673 created_at: 2018-7-26 ''' import socket import logging import threading class TcpClient: def __init__(self, host, port): # TCP socket config self.host = host self.port = port self.addr = (self.host, self.port) # logging config logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') self.logger = logging.getLogger(__name__) def log(self, message): self.logger.info(message) def connect(self): self.log(f'Client is starting to connect to {self.host}:{self.port}.') # connect to server self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.connect(self.addr) self.log(f'Client has connected to the server {self.host}:{self.port}.') # Receive message from server message = self.socket.recv(1024).decode('utf-8') self.log(f'Received message {message} from server.') def run(self): while True: user_input = input("Please input: ") self.socket.sendall(user_input.encode('utf-8')) data = self.socket.recv(1024) data_decoded = data.decode('utf-8') self.log(f'Messge from server: {data_decoded}.') if data_decoded == "exited": self.log('Connection has closed.') break if __name__ == "__main__": host = '127.0.0.1' port = 31500 client = TcpClient(host, port) client.connect() client.run()
点赞 评论

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务