socketserver模块
server类:处理链接
request类:处理通信
socketserver源码
(基于TCP)
#服务端
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
print(self.request) #conn
print(self.client_address) #addr
while True:
try:
#收消息
data = self.request.recv(1024)
if not data: break
print('收到客户端的消息是', data)
#发消息
self.request.sendall(data.upper())
except Exception as e:
print(e)
break
if __name__ == '__main__':
s = socketserver.ThreadingTCPServer(('127.0.0.1', 8000), MyServer) #多线程TCP服务端(==通信循环)
#s = socketserver.ForkingTCPServer(('127.0.0.1', 8000), MyServer) #多进程
s.serve_forever() #永远服务(==链接循环)
#客户端
from socket import *
ip_port = ('127.0.0.1', 8000)
back_log = 5
buffer_size = 1024
tcp_client = socket(AF_INET, SOCK_STREAM)
tcp_client.connect(ip_port)
while True:
msg = input('>>:').strip()
if not msg: continue
if msg == 'quit': break
tcp_client.send(msg.encode('utf-8'))
data = tcp_client.recv(buffer_size)
print('收到服务端发来的消息:', data.decode('utf-8'))
tcp_client.close()
运行结果: