1、 socketserver模块简介
在python的socket编程中,实用socket模块的时候,是不能实现多个连接的,当然如果加入其它的模块是可以的,例如select模块,在这里见到的介绍下socketserver模块。
socketserver,看其名字,就知道是一个socket的服务器模块的使用,在这个模块中,主要也就是实现服务器类的相关功能,在其中,也就是将socket模块和select模块进行了封装,从而创建了一些基类供人使用。
SocketServer模块简单化了编写网络服务器的工作。
它提供了四个基本的服务类:TCPServer(使用TCP协议)、UDPServer(使用数据报)、UnixStreamServer、
2、 socketserver服务器端和客户端代码
用SocketServer创建一个服务器需要三步:
1、通过子类化BaseRequestHandler类和覆盖它的handle()方法来创建一个请求处理器类,用于处理进来
的请求;
2、实例化服务类如TCPServer,并传递给它参数:服务器地址和请求处理器类;
3、调用服务实例对象的handle_request()或serve_forever()方法去处理请求。
#服务端
import socketserver
import time
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
#print("服务端启动")
print(self.client_address)
while True:
conn=self.request
#print(self.client_address)
while True:
client_data=conn.recv(1024)
print(str(client_data,'utf8'))
print('waiting....')
strtime=time.strftime('%Y-%m-%d %X')
inp=input('>>>>>>>>')
data=('%s %s'%(inp,strtime))
conn.sendall(bytes(data,'utf8'))
conn.close() if __name__=='__main__':
server=socketserver.ThreadingTCPServer(('127.0.0.1',8090),MyServer)
server.serve_forever()
#客户端
import socket
sk=socket.socket()
print(sk)
address=('127.0.0.1',8090)
sk.connect(address)
while True:
inp =input('>>>>>')
if inp=='exit':
break
sk.sendall(bytes(inp,'utf-8'))
data=sk.recv(1024)
print(str(data,'utf8'))
sk.close()
运行结果可以打开多个客户端与服务端发送信息: