TCP半连接池的原理:
import socket server = socket.socket() server.bind("127.0.0.1",3333) server.listen(5)
这里的listen(5)参数5就是最大允许等待连接的ip与端口,会形成一个ip连接请求等待池,池子大小由参数决定,超过范围的客户端将会被拒绝。客户端连接请求超时抛出异常。
UDP发送数据的工作原理
import socket client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #不需要创建链接 #直接发送数据 #不会因客户端的异常关闭,服务端出现错误 while True: msg = input(">>>:") if not msg:continue client.sendto(msg.encode("utf-8"),("127.0.0.1",3232)) data,addr = client.recvfrom(1024) print(data.decode("utf-8"))
客户端
import socket #默认使用TCP协议,当前UDP协议 server =socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.bind(("127.0.0.1",3232)) #不用监听 #创建链接 while True: #接受数据 data,addr = server.recvfrom(1024) res = data.upper() server.sendto(res,addr)#因为没有创建链接,所以发送需要设置发送地址
服务端
3. UDP的模板代码 *****
与TCP代码的区别
不需要监听 不需要接收
type参数为 SOCK_DGRAM
UDP 可以同时处理多个客户端 是因为CPU处理速度快 给人感觉像是同时处理
UDP协议不会粘包
缓冲区大小要足够数据包的大小,建议不要超过512
UDP的使用场景:视频电话,语音电话,直播,DNS域名解析器