在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正则表达式修复网站文章字体不统一的解决方法
Feb 21 Python
python使用三角迭代计算圆周率PI的方法
Mar 20 Python
Python中用Decorator来简化元编程的教程
Apr 13 Python
Python找出文件中使用率最高的汉字实例详解
Jun 03 Python
python查看微信好友是否删除自己
Dec 19 Python
Python实现时钟显示效果思路详解
Apr 11 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
python3实现名片管理系统
Nov 29 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
Feb 27 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
详解用 python-docx 创建浮动图片
Jan 24 Python
Python实现简单的2048小游戏
Mar 01 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 邮件发送问题解决
2014/03/22 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
详解js的六大数据类型
2016/12/27 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
Python中变量交换的例子
2014/08/25 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
python flask框架实现重定向功能示例
2019/07/02 Python
python使用 zip 同时迭代多个序列示例
2019/07/06 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
浅谈Python中的模块
2020/06/10 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
中国宠物用品商城:E宠商城
2016/08/27 全球购物
Rockport乐步美国官网:风靡美国的白宫鞋
2016/11/24 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
优秀中专生推荐信
2013/11/17 职场文书
采购部岗位职责
2013/11/24 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python