前言

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。

UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

UDP 的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用 UDP 较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

比如我们聊天用的 QQ 就是使用的 UDP 协议。

——摘自百度百科

今天的分享内容是使用 Python 结合 UDP传输协议 来开发一个简单的聊天小程序

环境准备

1. 准备工具:网络调试助手

如下图所示,选择UDP测试这个 tab 栏

2. 本地&目标 ip 与 port 配置

1)本地端口这栏需要配置一个指定的端口并绑定,因为在 Python 程序中需要指定这个 ip 地址和绑定的 port 号来接收信息

2)目标 IP 与目标端口也需要配置,用于 Python 程序接收从网络调试助手页面发送的消息,目标 IP 我这里和本地 IP 是一致的,目标端口则是 Python 程序中代码指定的

代码实战

import socketclass UdpMessage:def send_message(self, udp_socket):# 接收控制台输入的需发送消息的内容msg = input('请输入您要发送的信息:')try:# 接收控制台输入的发送对象的实际ip地址dest_ip = input('请输入您要发送对象的ip地址:')# 接收控制台输入的发送对象的实际port地址,port必须是int类型,使用int强转dest_port = int(input('请输入您发送对象的端口号:'))# 调用sendto方法先将消息内容进行utf-8的编码,后再将消息发送至目标对象udp_socket.sendto(msg.encode('utf-8'), (dest_ip, dest_port))except Exception as err:# 输出错误异常信息print('请输入正确的端口号,错误类型为:%s' % err)def receive_message(self, udp_socket):# 接收数据的最大信息字节数为1024recv_msg = udp_socket.recvfrom(1024)# 将接收的消息进行解码recv_ip_port = recv_msg[1]recv_msg = recv_msg[0].decode('gbk')print(f'收到消息内容:{recv_msg}, 对方的地址与端口:{recv_ip_port}')def entrance(self):# 创建套接字, AF_INET表示:ipv4的ip协议类型, SOCK_DGRAM表示:udp的套接字类型udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定本机信息,当ip地址为空字符串时默认绑定本机的ip,接收发送方传递的信息udp_socket.bind(('', 1230))# 死循环保证当前程序一直在运行中,可以随时接收和发送消息while True:print('若发送消息,请输入:send')print('若接收消息,请输入:receive')op_num = input('请问您是想发送还是接收信息?')if op_num == 'send':self.send_message(udp_socket)elif op_num == 'receive':self.receive_message(udp_socket)else:print('您输入的指令非send&receive,请重新输入!')if __name__ == '__main__':UdpMessage().entrance()
实现思路

1.实现 send_message 方法逻辑

接收用户输入需要发送的消息,发送消息对象的 ip 地址, port 信息,对消息内容进行编码,使用try...except代码段来捕获异常

2.实现 receive_message 方法逻辑

通过recvfrom方法接收消息,并指定能接收的最大信息字节数,对接收到的消息进行解码,打印出收到的消息与对方发送该条消息的 ip 地址和 port 信息

3.实现 entrance 方法逻辑

这个方法是整个聊天程序的入口主文件,send_messagereceive_message方法都将在此文件中被调用

  • 绑定本机 ip 地址和 1230 端口,发送消息时这个 ip 和 port 就是出口 ip 与 port 信息,在网络调试助手中目标 ip 与 port 要与此设置值保持一致

  • 这里是以死循环来保证聊天程序一直运行中状态,通过用户输入的指令来判断是走接收消息逻辑还是发送消息的逻辑

实现效果

1. 发送消息

配置正确的情况下,按照提示输入指定的信息,就能发送消息成功

2. 接收消息

网络调试助手中配置的目标IP,目标端口信息要与程序中设置一样,接收消息需在控制台输入指令:receive,则可收到 8987 端口发送的消息了

欢迎关注 无量测试之道 公众号,后台回复:udp 即可领取源码,回复:领取资源

Python+Unittest框架API自动化、

Python+Unittest框架API自动化、

Python+Pytest框架API自动化、

Python+Pandas+Pyecharts大数据分析、

Python+Selenium框架Web的UI自动化、

Python+Appium框架APP的UI自动化、

Python编程学习资源干货、

Vue前端组件化框架开发、

资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于IT互联网技术的分享。

包含:数据分析、大数据、机器学习、测试开发、API接口自动化、测试运维、UI自动化、性能测试、代码检测、编程技术等。

微信搜索公众号:无量测试之道

添加关注,让我们一起共同成长!

实战|轻松用 Python 开发一个简单有趣的聊天小程序相关推荐

  1. 国外大牛教你,如何用Python开发一个简单的区块链数据结构| 建议收藏

    来源 | Medium 作者 | arjuna sky kok 整理 / Aholiab 出品 | 区块链大本营(blockchain_camp) 根据IEEE此前的一项调查,Python已成为最受开 ...

  2. 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。

    开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号. 处理:1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加:(文件所在的目录不同,文 ...

  3. 使用 Python 实现一个简单的智能聊天机器人

    使用 Python 实现一个简单的智能聊天机器人 文章目录 使用 Python 实现一个简单的智能聊天机器人 简要说明 总体的思路 需要准备的环境 接收用户的语音输入, 并将其存为音频文件 调用百度A ...

  4. python自动填写小程序表单_新年好!教大家用Python写一个自动回复拜年信息的小程序!...

    原标题:新年好!教大家用Python写一个自动回复拜年信息的小程序! 过年期间,想必大家都收到很多拜年信息吧!有没有也被拜年短信(大部分是群发)搞得很焦虑?不回复似乎显得很没有礼貌,一一回复又累心劳神 ...

  5. python游戏最简单代码-如何利用Python开发一个简单的猜数字游戏

    前言 本文介绍如何使用Python制作一个简单的猜数字游戏. 游戏规则 玩家将猜测一个数字.如果猜测是正确的,玩家赢.如果不正确,程序会提示玩家所猜的数字与实际数字相比是"大(high)&q ...

  6. Python开发一个简单的BBS论坛

    项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用 ...

  7. python猜数字游戏编程入门_如何利用Python开发一个简单的猜数字游戏

    导读热词 前言 本文介绍如何使用Python制作一个简单的猜数字游戏. 游戏规则 玩家将猜测一个数字.如果猜测是正确的,玩家赢.如果不正确,程序会提示玩家所猜的数字与实际数字相比是"大(hi ...

  8. 利用Python做一个简单的对战小游戏

    利用Python做一个简单的文字对战小游戏 一.游戏介绍 1.大体介绍:文字版的对战小游戏,可以利用Python随机生成两个角色,角色带有各自的血量和攻击值两个指标.两人在对战时同时攻击对方,同时造成 ...

  9. python编写一个简单的猜数字小游戏

    该脚本包含了python基础的部分内容,python初学者既可以学习借鉴,也可以向朋友去装13. 本次编写的内容需要导入一个第三方模块random,可获得规定范围的随机数. 首先打开pycharm中下 ...

最新文章

  1. TCP及IP报头及协议
  2. C++中的值传递、指针传递、引用传递
  3. c语言递归最小值,递归求最大最小值算法 分治策略(c语言实现)
  4. ubuntu ssh是否安装mysql_ubuntu的安装及ubuntu中安装mysql和tomcat
  5. javascript里的面向对象
  6. oracle dg状态查询,oracle dg状态检查及相关命令
  7. java学习入门怎么做最为高效
  8. page,client,offset区别
  9. 深圳惊现“马云网络有限公司” 网友:你好 我是马云公司CEO
  10. Sketch vs. Figma vs. adobe xd:哪个设计工具最适合初学者?
  11. PyTorch 功能欠缺,Meta 推出 TorchRec 来补救?
  12. 如何解决gcc版本冲突?
  13. [Python] 将两个列表合并为字典
  14. 升级AndrOid4.3,谷歌发布Android 4.3系统 今日开始升级
  15. 一篇写给从未编程过的人的入门教程
  16. bLue的字符串游戏
  17. linux命令中文手册,Linux命令在线中文手册
  18. 斐讯盒子t1 刷Android,斐讯盒子T1/N1刷机流水账
  19. c语言中平方根函数(sqrt)
  20. html骨架效果,html5 页面基本骨架

热门文章

  1. Filtration and Distillation: Enhancing Region Attention for Fine-Grained Visual Categorization
  2. TCP ACK 方式
  3. TCP的ACK机制学习日志
  4. 对对DllRegisterServer的调用失败,错误代码为0x8007005的解决办法
  5. 双界河:一流的团队做一流的高空抛物视频检测产品
  6. CF3C--Tic-tac-toe翻译
  7. 有时候Mac下删除文件磁盘空间无法释放
  8. 电流的磁效应与电动机(马达/motor)实验
  9. Java内存泄漏系列--匿名内部类导致内存泄露--原因/解决方案
  10. ROS移动机器人——32电机驱动