异常处理
程序在运行中出现了不可预知的错误python
而且该错误没有对应的处理机制,那么就会以异常的形式表现出来编程
整个程序没法运行并发
异常的种类
1 NameError 名字错误socket
2 SyntaxError 语法错误tcp
3 KeyError 键不存在post
4 ValueError 值错误spa
5 IndexError 索引错误code
6 Exception/BaseException 能够接受全部错误server
如何避免 异常处理 在你认为可能会出现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()
客户端1
能够多个客户端,与服务端交互
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)