python基础--基于套接字进行文件传输、异常处理、socketserver模块
异常处理:
什么是异常处理:
程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来,造成的影响就是整个程序无法再正常运行
异常的结构:
异常的类型、异常的信息、异常的位置
异常的种类:
1、语法错误
是你程序能立刻解决的,这种错误是不能被容忍的,语法上的错误发现之后应该立刻解决
2、逻辑错误
逻辑错误无法一眼就看出来,因为是针对逻辑上的错误,可以采用异常处理机制进行捕获
常见的报错类型:
NAMEERROR 名字错误
SynataxERROR 语法错误
KeyERROR 键不存在
ValueError 值错误
IndexError 索引错误
如何避免:
异常处理:
在你认为可能会出现bug的代码块上方try一下,注意try内部的代码块要越少越好。
try: # 可能出现错误的代码块 pass except 出错的类型 as e: # 将报错的信息赋值给变量e pass # 出错之后的处理机制
UDP通信:数据报协议(自带报头), 没有双向通道,通信类似于发短信
1、udp协议客户端允许发空
2、udp协议不会粘包
3、udp协议服务端不存在的情况下,客户端照样不会报错
4、udp协议支持并发
并发:看起来像是同时运行
并行:真正意义上的同时运行
socketserver:
UDP的服务端:
import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): # print('来啦 老弟') while True: data,sock = self.request print(self.client_address) # 客户端地址 print(data.decode('utf-8')) sock.sendto(data.upper(),self.client_address) if __name__ == '__main__': """只要有客户端连接 会自动交给自定义类中的handle方法去处理""" server = socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyServer) # 创建一个基于TCP的对象 server.serve_forever() # 启动该服务对象
UDP的客户端:
import socket import time client = socket.socket(type=socket.SOCK_DGRAM) server_address = ('127.0.0.1',8080) while True: client.sendto(b'hello',server_address) data,addr = client.recvfrom(1024) print(data.decode('utf-8'),addr) time.sleep(1)
TCP的服务端:
import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): # print('来啦 老弟') while True: data = self.request.recv(1024) print(self.client_address) # 客户端地址 print(data.decode('utf-8')) self.request.send(data.upper()) if __name__ == '__main__': """只要有客户端连接 会自动交给自定义类中的handle方法去处理""" server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer) # 创建一个基于TCP的对象 server.serve_forever() # 启动该服务对象
TCP的服务端:
import socket client = socket.socket() client.connect(('127.0.0.1',8080)) while True: client.send(b'hello') data = client.recv(1024) print(data.decode('utf-8'))