程序在运行中出现了不可预知的错误
并且该错误没有对应的处理机制,那么就会以异常的形式表现出来
整个程序无法运行
异常的种类
1 NameError 名字错误
2 SyntaxError 语法错误
3 KeyError 键不存在
4 ValueError 值错误
5 IndexError 索引错误
6 Exception/BaseException 可以接受所有错误
如何避免 异常处理 在你认为可能会出现bug的代码块上方try一下:注意try内部的代码块越少越好
try:
可能出错的代码
except 出错的类型 as e: # 将报错信息赋值给变量e
出错之后的处理机制
try:
name
l = "asdasd"
l[12312313]
except Exception:
print("asdasd")
else:
print("asdasd")
finally:
print("assdasd")
这是异常的最复杂结构了
udp通信
又叫数据报协议(自带报头)
没有双向通道,与tcp相比,udp就是发短信(只管给你发,不管你是否能收到),tcp就是打电话(必须我们先要拨通手机才才能通信)
代码格式,后tcp的不同点
服务端
import socket
# 创建套接字对象
server = socket.socket(type=socket.SOCK_DGRAM)
# 还需绑定端口
server.bind(("127.0.01", 8181))
# 直接发生和接收消息,不需要在listen和accept了
date, address = server.recvfrom(1024)
print(date, address)
server.sendto(b'adassd', address)
客户端
import socket
# 创建一个套接字对象
client = socket.socket(type=socket.SOCK_DGRAM)
# 设置一个IP地址和端口号的变量
address = ("127.0.0.1", 8181)
# 发送消息用sendto并且需要两个参数一个是发送的消息还有一个是地址,与tcp不同的是,tcp用的send只需要一参数
client.sendto(b'asdasda', address)
# 接收消息过后也有两个参数,第一个是消息内容,还有一个是ip端口tcp只有一个参数,接收的是信息
date, address = client.recvfrom(1024)
print(date, address)
基于udp我们可以写一个简易版的QQ
服务端
import socket
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(("127.0.0.1",8787))
while True:
date,address = server.recvfrom(1024)
print(date.decode("utf-8"),address)
msg = input("请输入内容").strip().encode("utf-8")
server.sendto(msg,address)
客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
address = ("127.0.0.1",8787)
while True:
msg = input("请输入内容").strip().encode("utf-8")
client.sendto(msg,address)
date,addre = client.recvfrom(1024)
print(date.decode("utf-8"),addre)
udp的四个特点
1允许发空
2不粘包
3协议服务端断开,客户端也不会报错
4支持并发
socketserver
可以让,tcp向udp一样的并发编程
服务端可以与多个客户端同时交流
服务端
import socketserver
# 先创建一个类,继承 socketserver.BaseRequestHandler
class MyServer(socketserver.BaseRequestHandler):
# 定义一个方法handler里面写发送语句,和接收语句
def handle(self):
while True:
date = self.request.recv(1024)
print(self.client_address)
print(date.decode("utf-8"))
self.request.send(date.upper())
if __name__ == '__main__':
# 创建对象,将端口,和我们创建的类,传给对象
server = socketserver.ThreadingTCPServer(("127.0.0.1",8888),MyServer)
# 调用serve_forever方法
server.serve_forever()
可以多个客户端,与服务端交互
import socket
client = socket.socket()
client.connect(("127.0.0.1",8888))
while True:
client.send(b'asdad')
date = client.recv(1024)
print(date)
客户端2
import socket
client = socket.socket()
client.connect(("127.0.0.1",8888))
while True:
client.send(b'asdad')
date = client.recv(1024)
print(date)