1.udp基本模型
udp通信模型中,在通信开始之前,不需要建⽴相关的链接,只需要发送数 据即可,类似于⽣活中,"写信""。
2.基本使用。
udp客户端基本使用流程:
1.创建soket对象
2.发送数据,sk.sendto(msg.encode("utf-8"),("127.0.0.1",9000))区别于tcp这个是
# sendto("需要发送的内容",绑定端口号),tcp中是绑定端口和发送数据是分开的,udp放在了一起。
3.接受recvfrom 区别tcp中的recv
4.关闭套接字
客户端代码:
# ### udp 客户端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) msg = "今天天气不错" # udp 发送数据 # sendto ( "要发送的消息".encode() , (ip,端口) ) sk.sendto(msg.encode("utf-8"),("127.0.0.1",9000)) # udp 接受数据 msg,addr = sk.recvfrom(1024) print(msg,addr) res = msg.decode("utf-8") print(res) # 关闭udp连接 sk.close()
运行结果:
b\x8a\xe5\xa4\xa9\xe5\x91\xa8\xe4\xba\x94' ('127.0.0.1', 9000)
服务端代码:
udp中服务器的基本操作流程:
1.创建socket对象(注意是udp)
2.bind端口
3.udp作为服务器一定是先接受到数据。recvfrom
4.sendto
5.关闭套接字sk.close()
# ### udp 协议 服务端 import socket # socket.SOCK_DGRAM 代表udp协议 sk = socket.socket(type = socket.SOCK_DGRAM)
# 其中的socket.socket() 默认的是tcp连接 # 绑定地址 sk.bind( ("127.0.0.1",9000) ) # udp作为服务器,第一次一定是先接受消息 msg,cli_addr = sk.recvfrom(1024) print(msg,cli_addr) msg2 = "对,确实不错,因为今天周五" # sendto ( "要发送的消息".encode() , (ip,端口) ) sk.sendto(msg2.encode("utf-8"),cli_addr) # 关闭udp连接 sk.close()
# 运行结果是:
b'\xe4\xbb\x8a\xe5\xa4\xa9\xe5\xa4\xa9\xe6\xb0\x94\xe4\xb8\x8d\xe9\x94\x99' ('127.0.0.1', 50872)
3.udp中带有循环的发送消息
客户端代码:
# ### udp 循环发消息 客户端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) while True: # 发送数据 message = input("要发送的消息>>") sk.sendto( message.encode("utf-8") , ("127.0.0.1" , 9000) ) # 接受数据 msg,addr = sk.recvfrom(1024) print(msg.decode("utf-8")) # 关闭udp连接 sk.close()
运行结果:
服务器代码:
# ### udp 循环发消息 服务端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) # 绑定地址(在网络上注册该主机,让别人找到你) sk.bind( ("127.0.0.1",9000) ) while True: msg,cli_addr = sk.recvfrom(1024) print(cli_addr) print(msg.decode("utf-8")) message = input("我要说的话>>") # cli_addr ('127.0.0.1', 58745) sk.sendto(message.encode("utf-8") , cli_addr) # 关闭udp连接 sk.close()
运行结果:
小结:udp的循环也就是你一句我一句,但是可以多个客服端连接一个服务器。