创建一个TCP服务器
我们想实现一个通过TCP协议同客户端通信的服务器
解决方案
创建TCP服务器的一种简单方式就是利用socketserver库。比如, 下面是一个简单的echo服务示例:
from socketserver import BaseRequestHandler, TCPServer
class EchoHandler(BaseRequestHandler):
def handle(self):
print('Got connection from ', self.client_address)
while 1:
msg = self.request.recv(8192)
if not msg:
break
self.request.send(msg + ' 欢迎你'.encode('utf-8'))
if __name__ == '__main__':
serv = TCPServer(('', 20000), EchoHandler)
serv.serve_forever()
在这份代码中, 我们定义了一个特殊的处理类,它实现了一个handle()方法来服务于客户端连接。这里的request属性就代表着底层的客户端socket, 而client_address中包含了客户端的地址。
要测试这个服务端程序,首先运行这个脚本,然后再打开一个客户端脚本,将其连接到服务端上。示例如下:
from socket import socket, AF_INET, SOCK_STREAM
s = socket(AF_INET, SOCK_STREAM)
s.connect(('localhost', 20000))
s.send('Hello'.encode('utf-8'))
t = s.recv(8192)
print(t.decode('utf-8'))
结果如下:
# 服务器端
D:\Python39\python.exe D:/My_Project/TCP_server.py
D:\Python39\python.exe D:/My_Project/TCP_server.py
Got connection from ('192.168.1.9', 62719) # 另一台电脑连接服务端
Got connection from ('192.168.1.13', 49914) # 本地机访问服务端
Got connection from ('192.168.1.13', 49915)
Got connection from ('192.168.1.13', 49916)
# 客户端
D:\Python39\python.exe D:/My_Project/socket_client.py
Hello 欢迎你
Process finished with exit code 0