在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自动翻译实现方法
May 28 Python
对于Python中RawString的理解介绍
Jul 07 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
使用matplotlib画散点图的方法
May 25 Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 Python
对django layer弹窗组件的使用详解
Aug 31 Python
python网络爬虫 CrawlSpider使用详解
Sep 27 Python
用Python解数独的方法示例
Oct 24 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
pytorch三层全连接层实现手写字母识别方式
Jan 14 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
python调用私有属性的方法总结
Jul 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中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
php生成excel文件的简单方法
2014/02/08 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
javascript分页代码(当前页码居中)
2012/09/20 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
jquery中filter方法用法实例分析
2015/02/06 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
详解Python with/as使用说明
2018/12/13 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
优秀大学生推荐信范文
2013/11/28 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
小学生环保标语
2014/06/13 职场文书
课题研究阶段性总结
2015/08/13 职场文书
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android