5.再次实现
第一个原型非常简单,他确实实现了文件共享功能,但对用户不太友好。如果用户能够知道有哪些文件可用(这些文件可能是程序启动时就位于文件目录中,也可能是后来从其他节点那里下载的),将大有裨益。再次实现将实现这种列出文件的功能。
要保护节点包含的文件的列表,必须添加一个方法。你可以像对待方法fetch那样使用密码来保护这个方法,但让任何人都可以使用它很有用,而且不会带来任何安全风险。对对象进行扩展很容易——只需从它派生出子类即可。因此,你从Node类派生出子类ListableNode,并在其中新增一个方法list,它调用方法os.listdir来返回一个列表,其中包含指定目录中的所有文件。
为访问这个服务器方法,在客户端中添加方法update_list。
属性self.files指向一个列表框,这个列表框是在方法create_widgets中添加的。在方法create_widgets中创建列表框时,调用了方法update_list。另外,每次调用fetch_handler时,也调用了方法update_list(因为调用fetch_handler可能导致文件列表发生变化)。
就这么简单。至此,你创建了一个支持GUI的P2P文件共享程序,要运行它,可使用如下命令:
python guiclient.py urlfile.txt files/ http://localhost:8000
下图显示了最终的GUI客户端。
当然这个程序存在很大的扩展空间。有关这方面的建议,请参阅下一节。除这些建议外,你还可充分发挥自己的想象力。
6.进一步探索
之前的项目提出了一些有关如何对文件共享系统进行扩展的建议,这里再列出一些。
本文分享自 Python机器学习算法说书人 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!