前言
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_message
与receive_message
方法都将在此文件中被调用
- 绑定本机 ip 地址和 1230 端口,发送消息时这个 ip 和 port 就是出口 ip 与 port 信息,在网络调试助手中目标 ip 与 port 要与此设置值保持一致
- 这里是以死循环来保证聊天程序一直运行中状态,通过用户输入的指令来判断是走接收消息逻辑还是发送消息的逻辑
实现效果
1、发送消息
配置正确的情况下,按照提示输入指定的信息,就能发送消息成功
2、接收消息
网络调试助手中配置的目标IP,目标端口信息要与程序中设置一样,接收消息需在控制台输入指令:receive,则可收到 8987 端口发送的消息了
零基础小白的Python学习资源总结
如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,我也为大家整理了一份 【最新全套Python学习资料】 一定对你有用!
对于0基础小白入门:
如果你是零基础小白,想快速入门Python是可以考虑的!
1、学习时间相对较短,学习内容更全面更集中
2、可以找到适合自己的学习方案
这份资料包含:Python安装包+激活码、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等教程,带你从零开始系统性的学好Python!
我已经上传至CSDN官方,如果需要可以扫描下方二维码都可以免费获取【保证100%免费】
学好 Python 不论是就业、副业赚钱、还是提升学习、工作效率,都是非常不错的选择,但要学会 Python 还是要有一个学习规划。
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python课程视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
三、精品书籍
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、清华编程大佬出品《漫画看学Python》
用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。
五、Python实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、互联网企业面试真题
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
这份完整版的Python全套学习资料已经上传至CSDN官方,朋友们如果需要扫描下方二v码免费获取【保证100%免费】
以上全套资料已经为大家打包准备好了,希望对正在学习Python的你有所帮助!
如果你觉得这篇文章有帮助,可以点个赞呀~
我会坚持每天更新Python相关干货,分享自己的学习经验帮助想学习Python的朋友们少走弯路!
今天的文章python聊天工具开发_python编程小游戏简单的「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85800.html