![]() PyQt5 65篇 PyQt5:局域网群聊小工具1 导读:一个好玩的东西 LEARN MORE 正文 这期我们来谈谈PyQt5的网络编程,使用PyQt5来做一个局域网群聊小工具。 这个是来自GitHub上的C++项目,我将其改成了Python,同时修改了部分bug,新增部分功能。其实这类项目在GitHub上太多了,通过研究源码,能够较为快速的提升自己的编程能力。so,不是练手项目没有,而是项目太多了。 1 程序功能整个程序分为以下几个功能区,如下图: ![]() 1、聊天消息展示区 2、聊天工具栏 3、聊天内容发送区 4、在线用户 主要功能展示如下: 1、当新用户上线时,会在聊天展示区显示,如下图: ![]() 该图显示当前已有3个用户上线了。 2、聊天功能,如下图: ![]() 当用户发送信息时,在聊天内容展示区中会显示正在当前发言的用户,这里是Administrator,发言时间是2018-09-09 23:08:33。 其他用户同样能够看到相应的内容,类似群聊,如下图: ![]() 注意查看标题栏标红处,聊天内容是一致的,但是其实是三个不同用户(IP不同)看到的。 2.1 格式选择,如下图: ![]() 2.2 保留聊天记录,如下图: ![]() 如果想保留非格式的,可以选odt格式,如下图: ![]() 保留格式的话,可以选择htm或html格式,如下图: ![]() 2.3 清空聊天记录,如下图: ![]() 2.4 发送空消息,如下图: ![]() 2.5 @TA 当我们想给某人说话的时候,我们可以@TA,如下图: ![]() 要是当前这个用户的聊天窗口最小化,可能会错过消息,我们还会给他提示哦,如下图: ![]() 主要功能就是这些了,还包括在线人数统计,标题栏那里出现的当前是哪个用户在使用这个群聊工具和用户离开的记录,如下图: ![]() 2 实现原理利用UDP广播报文实现同局域网下所有小伙伴的信息收发。 名词解释UDP:UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。也就是说,当报文发送之后,是无法得知其是否安全完整到达的。(百度百科) 详细的UDP举例解释,可以参考:《Python网络编程基础篇》,点击阅读原文即可到达。 那么什么是广播呢? 还记得我们学校开运动会的时候吗,学校大喇叭播放着运动员的战绩,或者洋溢着激情的音乐,此时广播中突然响起了:“捡到饭卡一张,请丢失的同学抓紧时间来领取”。有点类似下面的场景: ![]() 学校的广播并没有针对谁,包括广播人都收到了相关的消息,但是只有真正丢失的学生才会感兴趣。 上面是广义的广播概念,下面我们会引申到计算机通信中,如下图: ![]() 终端A发送的广播报文,终端A、终端B、终端C都会收到,但是是否会使用则根据自己的需要了。 我们在这次的例子,所有的信息通过广播方式发送,运行该程序的电脑终端会处理相应的消息。 3 注意事项1、连接必须正常,不能出现169这类奇怪的IP地址。 2、请关闭防火墙,或者将相应的UDP端口加入防火墙中,方法请自行百度。 3、因为采用的是广播报文方式,要想验证成功,所有终端必须在交换机下,因为路由器会隔离广播报文。 4、一般来说,找几台电脑终端来试验不是容易的事情,一般都是通过虚拟机的方式来验证,我自己也是。这里特别注意,试验的时候,要么虚拟机之间进行测试,那么在真实的主机之间测试,避免ping可以通,但是就是不能用的情况。 如果在真实主机之间测试,请关闭虚拟网卡,避免主机之间测试失败。 ![]() 本例中虚拟机使用的网络连接方式为:NAT。 以上算是一点心得体会吧! 4 最后好的,今天介绍就到这里了。如果你喜欢本篇文章,请给我点赞 ![]() 赞赏(推荐 ![]() ) 分享给你的好友们吧! 欢迎关注微信公众号:学点编程吧!加油!(ง •̀_•́)ง (*•̀ㅂ•)و 点点最下方的广告也是一种支持啊~! ![]() 加入我们的学习交流QQ群,一起学习吧! ![]() 看完本文有收获?请转发分享给更多人 ![]() 猜你喜欢: 更多的PyQt5文章请在微信公众号/在线课程/图文教程中查找。 ![]() ![]() ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:学点编程吧,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |