早就听说socketsever特别厉害,可以简化客户端和服务端的实现,尤其是在多线程socket通话的情境下,可以说是一个比较高级的模块
python下的socket编程我们已经学过了,而今天,我们来使用socketsever这个模块,写一个TCP的多线程socket
服务端:
import socketserver
class Server(socketserver.BaseRequestHandler): # 使用socketserver模块 ,必先定义一个继承自BaseRequestHandler类
def handle(self):
print('New connection:',self.client_address)
try:
while True:
buf = self.request.recv(1024)
if not buf:
break
print('Client data:',buf.decode())
self.request.send(buf) # 收到消息重发客户端
except ConnectionResetError: # 捕捉客户端关闭信息
print('One connection closed')
if __name__ == '__main__':
HOST = 'localhost'
PORT = 8001
server = socketserver.ThreadingTCPServer((HOST,PORT),Server) # 实现多线程通话
server.serve_forever() # 持续运行
客户端:
import socket
HOST = 'localhost'
PORT = 8001
sock = socket.socket()
sock.connect((HOST, PORT))
while True:
message = input('Please input:')
sock.send(bytes(message, 'utf8'))
recv = sock.recv(1024)
print(str(recv, 'utf8'))
sock.close()
运行截图:
客户端运行:
服务端运行:
当有多个客户端连接时,服务端就会打印其客户端地址,并开始接收其消息