python socket编程 sockerserver
记录时间:2019/4/21
问题:
1.一般性问题:
解答:
1-1 什么是socketserver?
socketserver是socket的再封装,进一步简化了socket sever端的编写
1-2 socketserver编写的方法?
分三步来进行:
- 先定义一个 处理消息类,继承 socketserver.BaseRequestHandler 类。
- 重构该类中的 handle() 函数,这是你接收的数据最先到达的函数,同时根据在该类中完善其他的函数。
- 实例化 socketserver.ThreadingTCPServer()类,将自己构建的类作为参数传递进去。
- 代码如图所示,最后永久开启该服务器
import socketserver # 第一步,定义消息处理函数 class MyTcpHandle(socketserver.BaseRequestHandler): # 第二步,重写 handle() 类,让其处理消息 def handle(self): while True: try: self.data = self.request.recv(1024).strip() print("{} worte:".format(self.client_address[0])) print(self.data) self.request.send(self.data.upper()) except ConnectionResetError as e: # 断开连接通过异常处理 print("err",e) break if __name__ == "__main__": HOST, PORT = "localhost", 9999 # 第三步,实例化对象 server = socketserver.ThreadingTCPServer((HOST, PORT), MyTcpHandle) server.serve_forever() # 开启服务器
1-3 如何处理 链接中断 问题?
python中把它当做一个 异常 来进行处理
- 使用 try xxx except ConnectionResetError 来抓住异常
try: pass except ConnectionResetError as e: # 断开连接通过异常处理 print("err",e) break
1-4 如何实现 多并发 功能?
在实例化 服务器 时可以选择 线程,来实现多并发
- socketserver.ThreadingTCPServer() 多并发;socketserver.TCPServer() 单步
server = socketserver.ThreadingTCPServer((HOST, PORT), MyTcpHandle) # 实例化服务器
1-5 如何开启 服务器?
实例化服务器时有 serve_forever() 成员函数可以选择开启
- server.serve_forever()
server.serve_forever() # 开启服务器