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
最后
好的,今天介绍就到这里了,下期我们再见!如果你喜欢本篇文章,请给我点赞
赞赏(推荐)
分享给你的好友们吧!
领取专属 10元无门槛券
私享最新 技术干货