Python是一种流行的、面向对象的、高级编程语言,可以用于编写很多类型的应用程序,包括网络应用程序。在Python中,使用SocketServer模块可以很容易地编写基本的服务器程序,为本地或远程客户端提供服务。
SocketServer模块简介
Python的SocketServer模块封装了底层socket模块,并提供了高级API来实现通用的服务器和客户端的网络应用程序。SocketServer模块有两个主要的类:TCPServer和UDPServer,分别用于TCP(传输控制协议)和UDP(用户数据报协议)服务器。TCPServer是基于流的,适用于可靠的连接,而UDPServer是基于数据报的,适用于不可靠的连接。
编写基本服务器程序
下面是一个简单的基于TCP的服务器程序的示例:
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服务器,当客户端连接上来后,服务器会接收客户端传来的数据,并将数据回送给客户端。例如,当客户端发送"hello, server"时,服务器会将其转换成"HELLO, SERVER"回送给客户端。
启动服务器
运行上面的代码,会启动一个监听端口为9999的TCP服务器。可以使用telnet来测试服务器。例如,在命令行中输入:
$ telnet localhost 9999
然后在客户端中输入"hello, server",服务器会回送"HELLO, SERVER"。
编写更高级的服务器程序
上面的示例程序虽然简单,但只能处理一个客户端连接。如果要处理多个客户端连接,需要使用ThreadedTCPServer类或ForkingTCPServer类。
下面是一个使用ThreadedTCPServer类的高级服务器程序的示例,它可以同时处理多个客户端连接:
import SocketServer
import threading
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
# 接收并打印客户端数据
data = self.request.recv(1024)
cur_thread = threading.current_thread()
response = "{}: {}".format(cur_thread.name, data)
print(response)
# 将处理后的数据返回给客户端
self.request.sendall(response)
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
pass
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
# 创建多线程TCP服务器
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
# 启动服务器
server_thread = threading.Thread(target=server.serve_forever)
server_thread.daemon = True
server_thread.start()
print("Server loop running in thread:", server_thread.name)
# 等待用户按Ctrl+C停止服务器
server.serve_forever()
这个示例服务器使用了ThreadedTCPRequestHandler类处理来自客户端的请求,并使用ThreadedTCPServer类来启动多个线程来处理多个客户端连接。每个客户端连接都会分配到一个新的线程中进行处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python使用SocketServer模块编写基本服务器程序的教程 - Python技术站