UDP学习

前言

在了解UDP之前 ,我们先了解一下网络编程 ,包括三个要素,分别是IP地址端口号通信协议,那本文主要讲述的是UDP这种通信协议,以及编程的实现。

一、IP地址

网络中的计算机使用IP地址来进行唯一标识,IP地址有IPv4和IPv6两种类型。IPv4采用十进制或二进制表示形式,十进制是一种比较常用的表示形式,如192.168.1.131,IPv6采用十六进制表示形式,一般不常用。

在Windows系统下,打开cmd,输入命令ipconfig,按回车即可查看。在Linux或Mac系统下,打开终端,使用ifconfig命令,按回车即可查看。

二、端口号

端口号是计算机中的应用程序的一个整数数字标号,用来区分不同的应用程序。

0 ~ 1024 为被系统使用或保留的端口号,0 ~ 65535为有效的端口号,也就是说我们要对一些程序定义端口号的时候,要选择1024 ~ 65535范围内的整数数字。

网络协议—UDP概述

UDP(User Datagram Protocol)用户数据报协议

UDP的包头格式很简单,只有源端口号和目标端口号:
UDP学习

UDP的特点

  • 无连接:直到对端的IP和端口号就直接进行传输,不需要建立连接
  • 不可靠:没有确认机制,没有重传机制;因为没有网络故障该段无法发送到对方,UDP协议层也不会给应用层返回任何错误信息
  • 面向数据报:不能够灵活的控制读写数据的次数和数量, 控制选项较少,数据传输过程中延迟小,数据传输效率高

编程实践

客服端与服务端

UDP学习

基于UDP的socket编程

接收端

1、创建套接字

2、将套接字绑定到一个本地地址和端口上(blind)

3、等待接受数据(recvform)

4、关闭套接字。

客户端

1、创建套接字

2、向服务器发送数据(sendo)

3、关闭套接字
UDP学习

Code

from socket import *
# 1. 创建udp套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 2. 准备接收方的地址
# '192.168.123.7'表示目的ip地址
# 8080表示目的端口
dest_addr = ('192.168.123.7', 8080)  # 注意 是元组,ip是字符串,端口是数字
# 3. 从键盘获取数据
send_data = input("请输入要发送的数据:")
# 4. 发送数据到指定的电脑上的指定程序中
#udp_socket.sendto(b"hahahah", dest_addr)
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
# 5. 关闭套接字
udp_socket.close()
from socket import *
# 1. 创建套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 2. 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
local_addr = ('192.168.123.7', 8080) #  ip地址和端口号,ip一般不用写,表示本机的任何>一个ip
udp_socket.bind(local_addr)
# 3. 等待接收对方发送的数据
recv_data = udp_socket.recvfrom(1024) #  1024表示本次接收的最大字节数
# 4. 显示接收到的数据
print(recv_data[0].decode('gbk'))
# 5. 关闭套接字
udp_socket.close()

借鉴

1.终于把TCP协议与UDP协议给整明白了
2.Linux| |对于UDP的学习
3.UDP介绍及实例

上一篇:算法学习笔记DAY1(插入排序&归并排序)


下一篇:传输层协议