在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中的迭代器和生成器
Oct 26 Python
Python简单生成随机姓名的方法示例
Dec 27 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 Python
python实现简单五子棋游戏
Jun 18 Python
Django自关联实现多级联动查询实例
May 19 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
python matplotlib绘制三维图的示例
Sep 24 Python
python实现excel公式格式化的示例代码
Dec 23 Python
PyCharm 光标变成黑块的解决方式
Feb 06 Python
Python创建SQL数据库流程逐步讲解
Sep 23 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 运行效率总结(提示程序速度)
2009/11/26 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
JS中数组重排序方法
2016/11/11 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
Angular排序实例详解
2017/06/28 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
python判断数字是否是超级素数幂
2018/09/27 Python
python自动生成model文件过程详解
2019/11/02 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
父亲生日宴会答谢词
2014/01/10 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
餐厅筹备计划书
2014/04/25 职场文书
爱心倡议书范文
2014/05/12 职场文书
趣味运动会广播稿
2014/09/13 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
python基础之while循环语句的使用
2021/04/20 Python
javascript遍历对象的五种方式实例代码
2021/10/24 Javascript