首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PyQt5:局域网群聊小工具plus 2

PyQt5

71篇

PyQt5:局域网群聊小工具plus 2

导读:加强版

LEARN MORE

正文

今天我们继续来学习一下这个程序是怎么写的。

1

主程序

我们要在之前的聊天小工具主程序中增加一些代码,主要涉及以下这些函数:

2

核心代码解析

一些和之前重复的代码我就删除掉了。可能有些小伙伴说network()不就是创建udpSocket对象吗,为什么要单独写了?这个我们后面再提。

我们初始化服务器,具体的服务器实现,我们放到下期。

当服务器要发送文件的时候会发出sendFileName信号,这个信号是我们自定义的,同时调用getFileName()函数。

当服务器发出sendFileName信号的时候,同时会把发送的文件名带过来,我们把文件名赋给self.fileName,调用函数self.sendMessage(Chat.FileName)。

我们在上期中定义类三种不同的消息类型,这里再增加两种。

FileName, Refuse,前者表示发送文件,后者表示拒绝文件。

这个函数同以之前的相比较有了以下的改变:

函数参数中多了:serverAddress = “”,可以填入服务器地址。

增加了Chat.FileName、Chat.Refuse两种消息类型

当我们消息类型是Chat.FileName时,首先取得文件接收方的IP地址(clientAddress),然后将本机地址(服务器地址)、文件接收方(客户端地址)、发送的文件名,通过UDP协议广播出去。

消息类型是Chat.Refuse时,我们会把服务器端的地址带入,一般情况下,这只是在是客户端的时候才会这么使用。

这个函数是处理收到的广播消息的,新增了Chat.FileName、Chat.Refuse两种处理方式。

收到的信息类型是Chat.FileName时,我们取得客户端地址和文件名。同时调用hasPendingFile()处理文件。

当我们收到的消息类型是Chat.Refuse,看看收到的服务器地址和自己的IP地址一样吗?一样就表示是自己发的文件,所以直接调用服务器的refuse()函数就行了。

当我们收到的客户端地址和本机IP地址是一样的,表示确实是发给这台电脑的,我们再进行如下操作:

当我们的选择同意接收的时候,我们调用客户端的相关函数执行,为接收文件做好准备。具体的时候我们放到客户端实现讲解。

否则我们发出拒绝消息并把服务器地址带回,关闭udpSocket,并再一次重新生成udpSocket对象。

也许你会问,为什么还要再生成对象呢?因为我发现不进行这一步,会出现udpSocket不能接收广播报文的情况,造成软件失效,但是发送不会影响。

必须要选择发送的用户才能发送文件哦!

userlist是我们在用户列表中选择的对象,要是没有对象就会提示选择。

确定我们选择的行号。

如果是选择我们自己的IP则提示不能给自己发送,否则启动服务器。

3

最后

好的,今天介绍就到这里了,下期我们再见!如果你喜欢本篇文章,请给我点赞

赞赏(推荐)

分享给你的好友们吧!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181001G1DXOW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券