网络udp概述:

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议。一种无连接传输层协议,提供面向事务的简单不可靠信息传送服务。类似于日常生活中写信的场景,不需要建立链接,不关心发送结果。

背景知识:

Socket 有一段很长的历史,最初是在 1971 年被用于 ARPANET,随后就成了 1983 年发布的 Berkeley Software Distribution (BSD) 操作系统的 API,并且被命名为 Berkeley socket 当互联网在 20 世纪 90 年代随万维网兴起时,网络编程也火了起来。Web 服务和浏览器并不 是唯一使用新的连接网络和 Socket 的应用程序。各种类型不同规模的客户端 / 服务器应用都 广泛地使用着它们 时至今日,尽管 Socket API 使用的底层协议已经进化了很多年,也出现了许多新的协议,但 是底层的 API 仍然保持不变 Socket 应用最常见的类型就是 客户端 / 服务器 应用,服务器用来等待客户端的链接。我们教 程中涉及到的就是这类应用。更明确地说,我们将看到用于 Internet Socket 的 Socket API, 有时称为 Berkeley 或 BSD Socket。当然也有 Unix domain sockets —— 一种用于同一主机 进程间的通信

简单说,socket(简称套接字)就是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,socket属于全双工。

关于单双工、半双工、全双工的概念(百度百科):

数据通信中,数据在线路上的传送方式可以分为单工通信、半双工通信和全双工通信三种。所谓单工通信:是指消息只能单方向传输的工作方式例如收音机、遥控就是单工通信方式。单工通信信道是单向信道,发送端和接收端的身份是固定的,发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息,数据信号仅从一端传送到另一端,即信息流是单方向的。通信双方采用“按——讲”(PushToTalk,PTT)单工通信属于点到点的通信。根据收发频率的异同,单工通信可分为同频通信和异频通信。半双工通信:是指数据可以沿两个方向传送,但同一时刻一个信道只允许单方向传送,因此又被称为双向交替通信。(信息在两点之间能够在两个方向上进行发送,但不能同时发送的工作方式。)半双工方式要求收发两端都有发送装置和接收装置。由于这种方式要频繁变换信道方向,故效率低,但可以节约传输线路。半双工方式适用于终端与终端之间的会话式通信。方向的转变由软件控制的电子开关来控制的。例如:无线对讲机就是一种半双工设备,在同一时间内只允许一方讲话。

全双工是指在通信的任意时刻,线路上可以同时存在A到B和B到A的双向信号传输。在全双工方式下,通信系统的每一端都设置了发送器和接收器,因此,能控制数据同时在两个方向上传送。全双工方式无需进行方向的切换,因此,没有切换操作所产生的时间延迟,这对那些不能有时间延误的交互式应用(例如远程监测和控制系统)十分有利。比如,电话机则是一种全双工设备其通话双方可以同时进行对话

关于创建套接字的参数说明:

socket.socket(AddressFamily, Type),Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET。Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议)

网络udp通信步骤:

#1、创建套接字

udp_socket = socket.socket(socket. AF_INET, socket.SOCK_DGRAM)

# 2、绑定端口 作为客户端udp一般不绑定端口号

udp_socket.bind((“”, 7788))  # ip地址不写,默认本机任何一个ip

# 3、发送数据

socket.sendto(‘hello python’.encode(‘utf-8’), (‘192.168.21.66’, 7788))

#4、接收数据

recv_data = socket.recvfrom(1024)  # 返回元组信息包含数据和发送方的ip以及端口
recv_ip = recv_data[1]
recv_msg = recv_data[0].decode("utf-8")  #打印接收的信息
print("%s : %s" % (str(recv_ip), recv_msg))

# 5、关闭套接字

socket.close()

UDP通信模型: 

javascript 进行UDP通信 web udp通信_套接字

encode()和decode()函数的用法

    str.encode('utf-8'),把字符串编码成字节码,utf-8代表的是国际码,gbk代表的是汉字码。

    bytes.decoded('utf-8')把字节码解码成字符串。