在Python下进行UDP网络编程的教程


Posted in Python onApril 29, 2015

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()方法。

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

在Python下进行UDP网络编程的教程

小结

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

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

Python 相关文章推荐
python实现多线程暴力破解登陆路由器功能代码分享
Jan 04 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
python做量化投资系列之比特币初始配置
Jan 23 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
pytorch中的自定义反向传播,求导实例
Jan 06 Python
Python读取JSON数据操作实例解析
May 18 Python
解决Django Haystack全文检索为空的问题
May 19 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
史上最详细的Python打包成exe文件教程
Jan 17 Python
python周期任务调度工具Schedule使用详解
Nov 23 Python
python+pyhyper实现识别图片中的车牌号思路详解
Dec 24 Python
用Python进行TCP网络编程的教程
Apr 29 #Python
为Python程序添加图形化界面的教程
Apr 29 #Python
python执行get提交的方法
Apr 29 #Python
在Python中使用PIL模块处理图像的教程
Apr 29 #Python
python获得linux下所有挂载点(mount points)的方法
Apr 29 #Python
python创建和删除目录的方法
Apr 29 #Python
python访问系统环境变量的方法
Apr 29 #Python
You might like
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
jquery中常用的SET和GET
2009/01/13 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
优化Node.js Web应用运行速度的10个技巧
2014/09/03 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
React项目动态设置title标题的方法示例
2018/09/26 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
python连接mysql有哪些方法
2020/06/24 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
css sprite简单实例
2016/05/23 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
Java的五个基础面试题
2016/02/26 面试题
文明餐桌行动实施方案
2014/02/19 职场文书
员工安全生产责任书
2014/07/22 职场文书
教师对照四风自我剖析材料
2014/09/30 职场文书
中学生检讨书范文
2014/11/03 职场文书
优秀班主任申报材料
2014/12/16 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
淮海战役观后感
2015/06/11 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
导游词之太原天龙山
2020/01/02 职场文书
python3 字符串str和bytes相互转换
2022/03/23 Python
JavaScript中reduce()的用法
2022/05/11 Javascript