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

前言

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自动化、性能测试、代码检测、编程技术等。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/142671.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Real-Time C++ 嵌入式C++ 程序设计(三)

翻译自 Real-Time C Efficient Object-Oriented and Template Microcontroller Programming 4th Edition - Kormanyos, Christopher,这书涉及了从C11 到C20 的内容,主要介绍使用C 的模板、面向对象等特性设计嵌入式程序。书里的示例代码都是公开的&#…

python控制微信小程序,python+appium微信小程序自动化实现

一、安装Appium 二、Appium SDK配置 三、chromedriver驱动路径配置及appium启动 1.查看X5内核版本 微信小程序是基于goole的webview 做了封装了,叫x5内核,所以跟chrome浏览器定位元素一样,需要配置chromedriver.exe, 通过 Uc-devtools 工具可以识别到 Chrome是什么版本,再…

Python--微信小程序简单爬取

一、微信小程序获取要求: 获取前10页的内容,并保存 二、准备分析工作 1、先进入微信小程序页面,url http://www.wxapp-union.com/; 2、进入首页,右击检查,或f12,如图; 3、获取第一页的url&…

Python+微信小程序开发(一)了解和环境搭建

一、小程序介绍 1.什么是微信小程序? 移动互联网时代,手机手机软件,在手机上中安装很多软件腾讯和阿里(只安装自己不用别人) 腾讯:微信 N小程序阿里:支付宝 N小程序 2.为什么要做小程序&am…

Python 作为小程序后端的三种方法

你好,我是征哥。微信的小程序是一个很不错的体验,简单,上手快,这几天也在学习使用小程序,自己总结了三种用 Python 作为小程序后端的方式,供你参考。 方法一、微信的云托管[1]。 优点:不需要购买…

python微信小程序爬虫_Python爬取微信小程序实战(通用)

背景介绍 最近遇到一个需求,大致就是要获取某个小程序上的数据。心想小程序本质上就是移动端加壳的浏览器,所以想到用Python去获取数据。在网上学习了一下如何实现后,记录一下我的实现过程以及所踩过的小坑。本文关键词:Python&a…

python如何运行?第一个python小程序示范

我们想要用python编程首先要做的就是安装一些工具,随后学会应用。那么问题来了,我们需要安装什么?python又是怎样运行的呢? 安装什么工具? 1、Python 3.6.5(我安装的,还有很多版本&#xff09…

python写一个完整的小程序_写一个python小程序

在windows环境下进行操作 window+R 输入cmd 创建一个文件夹 mkdir pytxt 创建一个py文件 py.py 用notepad或者记事本等工具进行编辑 或 首先声明python3.5以后没有中文乱码,已经支持中文,就像java的jdk1.6以后都支持中文一样。 进入python交互环境下然后可以进行数据运算,…

整理了适合新手的20个Python练手小程序

100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python。 本文附带基础视频教程:私信回复【基础】就可以获取的 【程序1】 题目:有1、2、3、4个数字&…

Python之有趣的小程序

目录 前言 一、阶乘计算器 1.运行结果 2.源代码 3.知识点 (1)while的语法 (2) 注意 二、斐波那契数列 1.运行结果 2.源代码 3.知识点 三、猜数字游戏 1.运行结果 2.源代码 3.知识点 (1)多重…

40个Python入门小程序

有不少同学学完Python后仍然很难将其灵活运用。我整理 37 个Python入门的小程序。在实践中应用Python会有事半功倍的效果。 例子1:华氏温度转换为摄氏温度 华氏温度转摄氏温度的公式:C (F - 32) / 1.8。本例考察Python的加减乘除运算符。 ""…

【强推】8个实用的Python程序

1. 引言 本文所提到的所有代码都曾经帮助我激发了解决问题的一些思考。不言而喻,如果您想学习编码和提升解决问题的能力,我们可以尝试自己来解决以下问题。 闲话少说,我们直接开始吧。 :) 2. 处理句子中的脏话 编写…

【Python精华】100个Python练手小程序

100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python。 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数&#xff…

【代码附】Python实现简单的7款小程序。

前文 在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作。 下面带大家做7款各种功能不一样的项目。 闹钟 目的:编写一个创建闹钟的Python脚本。 提示:你可以使用date-time模块创建闹钟,以及…

六级备考24天|CET-6|翻译技巧3|翻译2020年6月真题红楼梦|逻辑问题|理解背诵|20:50~22:30

目录 一、逻辑重建 例句1 例句2 例句3 二、定语和状语 定语的翻译原则 什么是状语? 状语位置 状语的基本形式 三、主动和被动 四、无主句 五、并列和连动 连动 六、作题步骤 七、红楼梦 PRACTICE ANSWER​ 时态问题 一、逻辑重建 试比较: 1. 下雨了…

eclipse环境配置

eclipse环境配置 0. 前言1. 下载eclipse2. 下载sdk3. 配置sdk环境变量4. 验证sdk其他 0. 前言 本节记录如何配置eclipse的sdk配置 操作系统:Windows10 专业版 开发环境:eclipse 1. 下载eclipse 来这边下载一下eclipse 菜鸟教程 完事之后打开eclips…

如何在Linux中安装redis(图文教程,按照步骤可安装成功)

目录 1、在Redis版本库:https://download.redis.io/releases/ 可根据自己的需求选择下载对应的版本,然后直接下载 2、通过Xftp工具进行上传,选择指定的应用拖到右侧对应的目录即可(可以放在Linux的tmp目录下,之后再进…

Centos7安装Redis教程

Centos7安装Redis 0、更新文件 yum update -y这里会更新好多内容,需要等待一会。 1、下载redis 【CSDN资源下载】 https://redis.io/ 2、将压缩包放到Linux,我放在了export/intstall并解压 cd /export/install tar -zxvf redis-6.2.1.tar.gz3、安…

超级详细 的 Redis 安装教程

超级详细 的 Redis 安装教程 Windows 版本的 Redis 是 Microsoft 的开源部门提供的 Redis. 这个版本的 Redis 适合开发人员学习使用,生产环境中使用 Linux 系统上的 Redis, 这里讲解了这两种的安装和下载。按照你们需要的liunx 或window步骤来 就可以了(…

基础篇009.1 STM32驱动RC522 RFID模块之一:基础知识

目录 1. RFID概述 1.1 RFID工作原理 1.2 RFID分类 1.3 RFID模块 1.4 RFID卡片 1.5 IC卡和ID卡介绍 1.6 IC卡和ID的区分 2. Mifare卡结构原理 2.1 Mifare卡概述 2.2 Mifare非接触式 IC 卡性能简介(M1) 2.2.1 Mifare S50与Mifare S70 2.2.2 S5…