python---网络编程---UDP的使用

1.网络-UDP

1.1 UDP简介

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。
可以简单的理解为写信,流程比较简单

优点:无连接、快速传输
缺点:不太可靠

1.2 工作流程

  • 创建UDP套接字
  • 编辑发送内容
  • 关闭UDPT套接字

在这里插入图片描述

1.3 socket模块中涉及关键字

关键字基本作用
s.AF_INET协议族:支持Windows、linux、Unix
S.SOCK_DGRAM通讯类型:数字报,对应UDP协议
S.bind()为套接字绑定一个端口
s.sendto()发送信息
s.recvfrom()接收信息
s.close关闭套接字

1.4代码实战

例一:发送数据

需求:利用网络通信助手,编写一个python程序使其发送信息
提示:既然要发送数据,正如发短信一样,必须要知道对方电话号码。
UDP发送数据必须要知道接收方的IP和端口号。

import socket

def main()
	# 1.创建一个套接字
	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
	# 2.发送数据
	send_date = input("请输入要发送内容:")
	udp_socket.sendto(send_date.encode("utf-8"),("192,168,0,2",9876))
	#3.关闭套接字
	udp_socket.close()

if __name__ == "__main__":
	 main()

例二:循环发送数据

需求:继续上述要求,实现UDP套接字的循环发送信息
提示:使用 while Ture循环

import socket

def main()
	# 1.创建一个套接字
	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
	# 2.循环发送数据
	while True:
	     send_date = input("请输入要发送内容:")
	     # 输入 exit 退出循环
	     if send_date == "exit":
	     break
	     udp_socket.sendto(send_date.encode("utf-8"),("192,168,0,2",9876))
	#3.关闭套接字
	udp_socket.close()
	
if __name__ == "__main__":
	 main()

例三:接收数据

需求:接收对方的数据
提示:正如发送数据一样,接收数据必须要绑定自己的端口和IP

import socket

def main()
	# 1.创建一个套接字
	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
	
	# 2.绑定本地信息
	load_addr = ("192.168.0.2",9876)
	udp_socket.bind(load_addr)
	
	# 3.接收数据
	reve_date = udp_socket.recvfrom(1024)
	# reve_date 返回的值是一个元祖,可以拆包显示(收到数据、发送方IP和端口)
	reve_msg = reve_date[0] # 储存收到数据
	send_arr = reve_date[1] # 储存发送方信息
	
	# 4.显示数据
	print("%s: %S" % str(send_arr),reve_date.decode("utf-8"))
	
	# 5.关闭套接字
	udp_socket.close()

if __name__ == "__main__":
	 main()

注意
用户返回的数据是一个元祖,(接收到的数据,发送方信息(发送方的IP,端口号))

例四:使用同一个套接字收发数据


import socket

def main():

    # 创建一个套接字
    udp_socket =socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    # 获取对方的ip以及端口port
    dest_ip = input("请输入对方ip地址:")
    dest_port = int(input("请输入对方端口号:"))

    # 从键盘获取数据
    send_date = input("请输入要发送的数据")

    # 使用套接字发送数据
    udp_socket.sendto(send_date.encode("utf-8"),(dest_ip,dest_port))

    # 接收发送过来的数据 (套接字可以同时收发数据)
    recive_date = udp_socket.recvfrom(1024)
    print(recive_date)

    # 关闭套接字
    udp_socket.close()


if __name__ == "__main__":
    main()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值