Python中的SocketServer模块简介
SocketServer模块是Python标准库中的一个模块,用于实现基于网络的服务器和客户端的编程。它提供了一组类和函数,用于创建和管理网络通信。
SocketServer模块中最常用的类是BaseServer、TCPServer和UDPServer。BaseServer是一个抽象基类,用于创建服务器对象,而TCPServer和UDPServer是具体的服务器类,用于创建基于TCP协议和UDP协议的服务器对象。
下面是一个简单的SocketServer模块的使用例子:
import SocketServer
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
# 当有客户端连接时,该方法会被调用
self.data = self.request.recv(1024).strip()
print "{} wrote:".format(self.client_address[0])
print self.data
self.request.sendall(self.data.upper())
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
# 创建TCP服务器
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
# 启动服务器,进入循环等待客户端连接
server.serve_forever()
在这个例子中,我们创建了一个TCP服务器,当有客户端连接时,服务器会将客户端发送的消息变成大写并发送回去。服务器的IP地址是localhost,端口号是9999。
在自定义的处理程序类MyTCPHandler中,我们实现了一个handle方法,当有客户端连接时,该方法会被调用。在这个方法中,我们首先使用self.request.recv()方法接收客户端发送的消息,然后使用self.request.sendall()方法将消息变成大写并发送回去。
通过调用SocketServer.TCPServer()方法,我们创建了一个TCP服务器对象,并将服务器的地址和处理程序类传递给它。然后,通过调用server.serve_forever()方法,我们开始服务器的主循环,等待客户端的连接。
除了TCP服务器之外,SocketServer模块还支持创建UDP服务器。使用UDPServer类和自定义的处理程序类,我们可以实现一个简单的UDP服务器:
import SocketServer
class MyUDPHandler(SocketServer.BaseRequestHandler):
def handle(self):
# 当有客户端发送数据时,该方法会被调用
data, socket = self.request
print "{} wrote:".format(self.client_address[0])
print data
socket.sendto(data.upper(), self.client_address)
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
# 创建UDP服务器
server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler)
# 启动服务器,进入循环等待客户端连接
server.serve_forever()
这个UDP服务器和上面的TCP服务器非常类似,不过在处理程序类MyUDPHandler的handle方法中,我们接收到的数据被存储在data变量中,而不是self.request。
另外值得注意的是,在创建服务器对象时,我们分别使用TCPServer和UDPServer来指定服务器类型,这样就可以创建基于TCP和UDP协议的服务器。
