python使用SocketServer实现网络服务器
SocketServer模块简化了网络服务器的编写。在进行socket创建时,使用SocketServer会减少创建步骤,而且它内部提供了4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer这4个类是同步进行处理的; 另外提供ForkingMixIn和ThreadingMixIn这两个类来支持异步。
案例
Python3.6服务器端代码为
[Python]
纯文本查看
复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | #coding:utf-8import socketserverfrom time import ctimeprint("=====================SocketServer TCP服务器=====================");HOST = '' PORT = 8888#端口号ADDR = (HOST, PORT)class MyRequestHandler(socketserver.StreamRequestHandler): #StreamRequestHandler实现TCP/UDP服务器的服务处理器 def handle(self): #重写handle方法 print('连接到:', self.client_address) data = self.rfile.readline().strip() print(data) self.wfile.write(('[%s] %s' % (ctime(), data.decode('utf-8')).encode('utf-8'))tcpServer = socketserver.TCPServer(ADDR, MyRequestHandler)print('等待连接...')tcpServer .serve_forever() |
客户端代码为
[Python]
纯文本查看
复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #coding:utf-8from socket import *print("=====================SocketServer TCP客户端=====================");HOST = '127.0.0.1'PORT = 8888BUFSIZ = 1024ADDR = (HOST, PORT)while True: tcpCli = socket(AF_INET, SOCK_STREAM) #创建客户端套接字 tcpCli.connect(ADDR) #发起TCP连接 data = input('> ') #接收用户输入信息 if not data: #如果用户输入的内容是否为空 break tcpCli.send(data.encode('utf-8')) #客户端发送消息,必须发送字节数组 buffer = tcpCli.recv(BUFSIZ) #接收回应消息,接收到的是字节数组 if not buffer: #如果接收服务器信息失败,或响应消息为空 break print(buffer.decode('utf-8')) #打印回应消息 tcpCli.close() #关闭客户端socket |
更多技术资讯可关注:gzitcast