UDP协议实现socket

mac2022-06-30  107

UDP协议实现socket

UDP协议的特点

UDP是无链接的,先启动哪一端都不会报错(不可靠)UDP协议是数据报协议,发空的时候也会自带报头,因此客户端输入空,服务端也能收到因为自带包头,所以不会出现粘包现象,但是多余的内容不会接收,所以会丢包。

UDP的使用

UPD协议一般不用于传输大数据。UDP套接字虽然没有粘包问题,但是不能替代TCP套接字,因为UPD协议有一个缺陷:如果数据发送的途中,数据丢失,则数据就丢失了,而TCP协议则不会有这种缺陷,因此一般UPD套接字用户无关紧要的数据发送,例如qq聊天。

实现简单通信循环聊天

# server import socket # 指定连接协议为udp协议 sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',8080)) # 绑定地址后即可首发数据,无需监听 while True: # recvfrom接收传来的信息和client端地址 msg,addr = sk.recvfrom(1024) print(msg.decode('utf8')) info = input('>>>') info = '来自主机的消息:'+info # 发送数据的时候要带上addr sk.sendto(info.encode('utf8'),addr) sk.close() # client1 import socket sk = socket.socket(type = socket.SOCK_DGRAM) # 指定收发数据的server端地址 addr = ('127.0.0.1',8080) while True: info = input('大哥:') info = '来自大哥的消息:' + info sk.sendto(info.encode('utf8'),addr) msg,addr = sk.recvfrom(1024) print(msg.decode('utf8')) sk.close() # client2 import socket sk = socket.socket(type = socket.SOCK_DGRAM) # 指定收发数据的server端地址 addr = ('127.0.0.1',8080) while True: info = input('二哥:') info = '来自二哥的消息:' + info sk.sendto(info.encode('utf8'),addr) msg,addr = sk.recvfrom(1024) print(msg.decode('utf8')) sk.close()

转载于:https://www.cnblogs.com/dadazunzhe/p/11495420.html

最新回复(0)