TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。

使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。

虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。

我们来看看如何通过UDP协议传输数据。和TCP类似,使用UDP的通信双方也分为客户端和服务器。服务器首先需要绑定端口:

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

# 绑定端口:

s.bind(('127.0.0.1', 9999))

创建Socket时,SOCK_DGRAM指定了这个Socket的类型是UDP。绑定端口和TCP一样,但是不需要调用listen()方法,而是直接接收来自任何客户端的数据:

print 'Bind UDP on 9999...'

while True:

# 接收数据:

data, addr = s.recvfrom(1024)

print 'Received from %s:%s.' % addr

s.sendto('Hello, %s!' % data, addr)

recvfrom()方法返回数据和客户端的地址与端口,这样,服务器收到数据后,直接调用sendto()就可以把数据用UDP发给客户端。

注意这里省掉了多线程,因为这个例子很简单。

客户端使用UDP时,首先仍然创建基于UDP的Socket,然后,不需要调用connect(),直接通过sendto()给服务器发数据:

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

for data in ['Michael', 'Tracy', 'Sarah']:

# 发送数据:

s.sendto(data, ('127.0.0.1', 9999))

# 接收数据:

print s.recv(1024)

s.close()

从服务器接收数据仍然调用recv()方法。

仍然用两个命令行分别启动服务器和客户端测试,结果如下:

小结

UDP的使用与TCP类似,但是不需要建立连接。此外,服务器绑定UDP端口和TCP端口互不冲突,也就是说,UDP的9999端口与TCP的9999端口可以各自绑定。

源码参考:https://github.com/michaelliao/learn-python/tree/master/socket

python udp编程_在Python下进行UDP网络编程的教程相关推荐

  1. java io 网络编程_[笔面] Java IO和网络编程相关面试

    1.网络编程时的同步.异步.阻塞.非阻塞? 同步:函数调用在没得到结果之前,没有调用结果,不返回任何结果. 异步:函数调用在没得到结果之前,没有调用结果,返回状态信息. 阻塞:函数调用在没得到结果之前 ...

  2. java马士兵网络编程_学习笔记-马士兵java - 网络编程

    1. 网络基础 a. 计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地相互传递信息,共享硬件.软件.数据信息等资源. ...

  3. linux下read函数缺失字节_机器人、工控机和Linux 网络编程接口能否蹭出火花?

    今日份干货分享 随着全国大学生机器人大赛的不断发展,机器人的控制器也由以单片机为主的控制器逐渐转向以工控机为主的控制器,工控机上可以跑操作系统,系统的实时性以及对大数据的处理性也十分不错.以后机器人的 ...

  4. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  5. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  6. python的基础网络编程是下列_Python入门基础之网络编程、socket编程、TCP、UDP编程...

    忙了两天,继续更文!希望多多支持. 套接字 套接字是一种具有之前所说的"通讯端点"概念的计算机网络数据结构.网络化的应用程序在开始任何通讯之前都必需要创建套接字. 套接字有三种: ...

  7. python 网页编程_通过Python编程检索网页

    python 网页编程 The internet and the World Wide Web (WWW), is probably the most prominent source of info ...

  8. python环境搭建_搭建Python编程环境

    说明:本文面向信息技术新教材环境下的中学生或者编程小白.Python作为新教材落实计算思维的主要载体,有其独特的魅力.千里之行始于足下,搭建Python运行环境是跨出进入新世界大门的第一步. 搭建Py ...

  9. 自学python需要什么_自学Python编程有什么要求

    现在Python这门课程在计算机专业中特别火爆,我们也都知道,它是时代的趋势,那么大家知道自学Python课程有什么方法或者捷径吗?了解一下 我们首先来看看别人的学习方法吧. 1.看网上名师的教程,学 ...

最新文章

  1. chrome 插件开发各种功能demo_Chrome 插件开发全攻略
  2. Eclipse Tomcat的一些基本配置
  3. Oracle 11g密码过期问题及解决方案
  4. 【推荐】大型网站图片服务器架构的演进
  5. 下一代Hotmail和MSN Messenger最新界面截图
  6. vc设备工程师_4注册公用设备工程师专业基础考试真题.
  7. python 绘图与可视化 Graphviz 二叉树 、 error: Microsoft Visual C++ 14.0 is required
  8. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(七)
  9. python下列数据中不属于字符串的是_下列数据中,不属于字符串的是( )。 (6.0分)_学小易找答案...
  10. 用Python DBUtils安全连接mssql
  11. 如何在Rancher 2.0上快速部署Datadog
  12. 简述hdfs工作原理_简述HDFS的原理?
  13. python批量读取txt_python如何批量读取txt文件
  14. 静态工作点稳定方法——原理;分压偏置共射放大电路静态分析、动态分析
  15. 以一次失败的沟通,来聊聊技术人员沟通中常见的几个问题
  16. Android简单学习使用PictureSelector框架图片选取裁剪
  17. 3---kaldi 自己录音,做自己版本的yesNo
  18. 【C语言】double 关键字
  19. 《Deep Learning from Scratch》鱼书学习笔记 3-6,7 手写数字的识别
  20. GPS定位原理及应用简介

热门文章

  1. ubuntu中linux内核的编译、更换与使用
  2. Linux下的RTC子系统
  3. 深度学习分割json_to_data报错Too many dimensions: 3 > 2
  4. 把javascript中的json对象传到action的list里的方法
  5. mpvue template compiler 中文版教程
  6. xmodmap: unable to open display '' Error: Couldn't connect to XServer passing null display
  7. 《CCNP安全Secure 642-637认证考试指南》——第8章 配置与实施路由式数据面安全...
  8. Windows与Linux系统拷贝文件之pscp的使用
  9. Python xlrd 读取xls文件
  10. 安装JDK 1.7时could not locate a suitable jar utility解决方案