python UDP编程的案例分析

  介绍

这篇文章主要介绍python UDP编程的案例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

前面我们讲了TCP编程,我们知道TCP可以建立可靠连接,并且通信双方都可以以流的形式发送数据。本文我们再来介绍另一个常用的协议UDP。相对TCP、UDP则是面向无连接的协议。

<强> UDP协议

我们来看UDP的定义:

UDP协议(用户数据报协议)中文名是用户数据报协议,是OSI(开放系统互连,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

从这个定义中,我们可以总结出UDP的几个特点以及其与TCP的区别:

    <李> UDP是用户数据报协议,传输模式是数据报,而TCP是基于字节流的传输协议。 <李> UDP是无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。 <李> UDP是简单不可靠的协议,它不提供可靠性,只是把数据包发送出去,并不保证能够到达目的地。由于它不需要在客户端和服务端之间建立连接,也没有超时重发机制,所以传输速度很快。
      李,

从以上特点,我们可以看到UDP适合应用在每次传输数据量小,对数据完整性要求不高,对传输速度要求高的领域。这里面最典型的就是即时通信的场景,微信是一个很常见的例子。相信大家在使用微信的时候都遇到过先发的消息后收的到,或者有些发送的消息对方没有收到的情况吧,这就是UDP协议典型的特点,不保证传输数据的完整性和顺序性。除此之外,UDP还应用在在线视频,网络电话等场景。

<强> UDP传输过程

我们在讲TCP的时候,我们说TCP客户端和服务端必须先连接才可以传输数据:客户端先请求连接服务器,服务器接受连接请求,然后双方才可以通信。在UDP协议里,客户端只需要知道服务器的地址和端口号,就可以直接发送数据了。

我们来看下UDP传输的流程图:

 python UDP编程的案例分析

UDP服务器的建立可以归纳这几步:

    <李>创建插座(套接字) <李>绑定套接字的IP地址和端口号 <李>接收客户端数据李 <>李关闭连接李

UDP客户端的创建可总结为这几步:

    <李>创建插座(套接字) <李>向服务器发送数据李 <>李关闭连接
      李,

这里需要注意的是UDP客户端连接到服务器的IP和端口号必须是UDP服务器的IP和监听的端口号,服务器服务器只需要绑定IP和端口号,就可以时刻准备接收客户端发送的数据,此时服务器处于阻塞状态,直到接收到数据为止。

<强> UDP客户端

创建插座,可以这样做:

 #导入插座库
  进口套接字
  
  #创建一个插座
  s=socket.socket(套接字。AF_INET socket.SOCK_DGRAM) 

创建套接字时,第一个参数套接字。AF_INET表示指定使用IPv4协议,如果要使用IPv6协议,就指定为插座。AF_INET6.SOCK_DGRAM指定基于UDP的数据报式插座通信。

创建了座之后,我们就可以向目标地址发送数据报了:

 #发送数据
  s.sendto (b # 39;你好服务器# 39;,(& # 39;127.0.0.1 # 39;,6000))

第一个参数是需要发送的数据报内容,第二个参数是IP地址和端口号的二元组。

如果是接收数据的话,我们可以这样写:

 #接收数据
  数据,addr=s.recv (1024)
  #解码接收到的数据
  data=https://www.yisu.com/zixun/data.decode (utf - 8) 

接收信息的时候,第一个数据表示接收到的数据,addr是对方的IP地址和端口号的二元组。

想要关闭插座,直接调用关闭()方法即可:

 #关闭插座
  socket.close () 

<强> UDP服务器

相比于客户端,服务器端只是多了一个步骤,在创建插座之后,需要绑定一个IP地址和端口号,以便接收客户端随时可能发送过来的数据。绑定的方法为:

 #绑定IP和端口
  s.bind ((& # 39; 127.0.0.1 # 39;, 6000)) 

<强> UDP简单实例

我们通过一个简单的实例来体会下UDP的客户端和服务器的通信流程。

服务器代码为:

进口套接字
  
  #创建套接字
  sk=socket.socket(插座。AF_INET socket.SOCK_DGRAM)
  #绑定IP和端口号
  sk.bind ((& # 39; 127.0.0.1 # 39;, 6000))
  而真正的:
  #接收数据报
  味精,addr=sk.recvfrom (1024)
  #打印
  打印(& # 39;来自[% s: % s]的消息:% & # 39;% (addr [0] addr [1], msg.decode (& # 39; utf - 8 # 39;)))
  
  #等待输入
  输入=输入(& # 39;在祝辞祝辞& # 39;)
  #发送数据报
  sk.sendto (inp.encode (& # 39; utf - 8 # 39;) (addr)
  
  #关闭套接字
  sk.close () 

python UDP编程的案例分析