UDP 简介
UDP : user datagram protocol 用户数据报协议
UDP 的特点:不用面向连接 不可靠 传输速度快 适合做广播
上代码:
一、 udp 发送数据:
import socket
# 判断模块是否是主模块,判断是否是程序的入口
if __name__ == '__main__':
# 1. 创建udp的协议的socket
# AF_INET: 表示ip地址的类型, ipv4
# SOCK_DGRAM: 表示udp传输协议类型
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2. 准备发送的数据
send_content = "哈哈,学习了socket"
# 总结: 乌版图网络调试助手使用utf-8解码,window网络调试助手使用gbk进行解码
# 字符串转二进制->字符串编码成为二进制数据
send_data = send_content.encode("gbk")
print(send_data)
# 3. 发送数据
udp_socket.sendto(send_data, ("192.168.36.110", 9090))
# 4. 关闭socket
udp_socket.close()
二、UDP 接收数据
import socket
if __name__ == '__main__':
# 创建udpsocket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 发送数据
udp_socket.sendto("哈哈,我又来了!".encode("gbk"), ("192.168.36.110", 9090))
# 接收数据 1024:表示每次接收最大的字节数
# 提示: recvfrom 会阻塞程序,等待接收到数据以后代码才能继续往下执行
recv_data, ip_port = udp_socket.recvfrom(1024)
# 对二进制数据进行解码
# 解码:把二进制转成字符串
recv_content = recv_data.decode("gbk")
print(recv_content, ip_port)
udp_socket.close()
小项目 UDP 聊天器
# 导入socket
import socket
def send_msg():
# 准备发送数据
send_info = input("请输入要发送的内容:")
send_data = send_info.encode("gbk")
# 输入window 端的IP 以及程序的端口号
dest_ip = input("请输入对方的IP:")
dest_port = input("请输入对方的端口号:")
# 发送数据到windows
udp_socket.sendto(send_data, (dest_ip,int(dest_port)))
def recv_msg():
# 创建udp socket
#udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 准备接收数据
recv_info = udp_socket.recvfrom(1024)
print(recv_info[0].decode("gbk"), recv_info[1], sep=">>>")
if __name__ == '__main__':
# 创建udp socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
cmd = input("请输入要执行的指令:1[发送数据],2[接收数据],3[退出程序]")
if cmd == '1':
send_msg()
elif cmd == '2':
recv_msg()
elif cmd == '3':
break
# 关闭socket
udp_socket.close()
网友评论