在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中装饰器的用法
Apr 27 Python
浅谈Python peewee 使用经验
Oct 20 Python
Python实现翻转数组功能示例
Jan 12 Python
sublime python3 输入换行不结束的方法
Apr 19 Python
Python利用splinter实现浏览器自动化操作方法
May 11 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
pycharm配置git(图文教程)
Aug 16 Python
python银行系统实现源码
Oct 25 Python
推荐技术人员一款Python开源库(造数据神器)
Jul 08 Python
详解scrapy内置中间件的顺序
Sep 28 Python
python自动生成sql语句的脚本
Feb 24 Python
Python音乐爬虫完美绕过反爬
Aug 30 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 FLEA中二叉树数组的遍历输出
2012/09/26 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
php blowfish加密解密算法
2016/07/02 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
限制复选框的最大可选数
2006/07/01 Javascript
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
详解Vue中过度动画效果应用
2017/05/25 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
jQuery实现表格隔行换色
2018/09/01 jQuery
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
2019/12/22 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
简单上手Python中装饰器的使用
2015/07/12 Python
Django在win10下的安装并创建工程
2017/11/20 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
python批量修改文件名的示例
2020/09/27 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
保安的辞职报告怎么写
2014/01/20 职场文书
信息工作经验交流材料
2014/05/28 职场文书
个人租房协议书样本
2014/10/01 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
师德培训心得体会2016
2016/01/09 职场文书
浅谈JavaScript作用域
2021/12/06 Javascript
尝试使用Python爬取城市租房信息
2022/04/12 Python
Python如何让字典保持有序排列
2022/04/29 Python