在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 28 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
python代码编写计算器小程序
Mar 30 Python
Django 项目重命名的实现步骤解析
Aug 14 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
Python基于staticmethod装饰器标示静态方法
Oct 17 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
python中uuid模块实例浅析
Dec 29 Python
如何用python开发Zeroc Ice应用
Jan 29 Python
一文搞懂如何实现Go 超时控制
Mar 30 Python
PyQt5结合QtDesigner实现文本框读写操作
Jun 11 Python
OpenCV绘制圆端矩形的示例代码
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数字每三位加逗号的功能函数
2015/10/22 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
python计算牛顿迭代多项式实例分析
2015/05/07 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
浅谈Python __init__.py的作用
2020/10/28 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
2014年迎新年活动方案
2014/02/19 职场文书
煤矿安全生产标语
2014/06/06 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
旷工检讨书大全
2015/08/15 职场文书
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏