Websocket通信实战项目(图片互传应用)+PyQt界面+python异步编程(async) (上)服务器端python实现

Rqtz : 个人主页
​​   共享IT之美,共创机器未来    
  Sharing the Beauty of IT and Creating the Future of Machines Together


目录

项目背景

​编辑​专有名词介绍

服务器GUI展示      

功能(位置见上图序号)

客户端GUI展示(h5+css+js),平板,手机

动图​编辑

视频 图片互传-优快云直播

一键自动获取IP地址

websocket通信实现

按钮映射到新线程启动websocket服务器

 python中使用async异步实现全双工通信,B/S主动发送数据,被动接收数据

 图片二进制转换显示到Qt中label控件(涉及到opencv)

上一张,下一张功能实现

整体代码结构

最后


项目背景

        由于比赛需要,电脑的window系统无法满足要求,因此就需要安装linux系统,采用双系统安装。安装完成之后,发现在手机端与电脑端,电脑端和电脑端进行通信(传输图片)时,没有window上方便,用传统的方式传输的话,大家可能都倾向于QQ或微信,但是在linux上可能就不是那么方便。因此,基于这个问题,我想要开发一个可以在任何平台都可以运行的图片互传软件,一开始想借助python在各个操作系统上的通用,使用CS架构服务器和客户端都编写成基于Pyqt的Gui界面,但是他们虽然支持在电脑端的各个操作系统之间运行,但是安卓或IOS平台就不是很优雅,手机不能使用的话,那就失去了方便性。因此,我将服务器端还保持原有的Pyqt的开发方式,在客户端采用Websocket的方式,原因是websocket支持javascripts编写,这样就可以通过浏览器来建立客户端,而浏览器在任何平台都可以使用,包括安卓和IOS平台,这样的BS架构就非常优雅的解决了安卓平台的限制性。同样这个项目也是对自己学习的一个检验。

经过测试,可以在手机端与电脑端,平板端与电脑端,电脑端与电脑端进行全双工的实时通信

客户端实现请看 Websocket通信实战项目(js)(图片互传应用)(下)客户端H5+css+js实现-优快云博客

直接看python异步通信async,点击目录

1f9cfc23cdd448dd84f6561211c42dde.png​专有名词介绍

  • websocket协议:

        WebSocket是一种实现在单个TCP连接上进行全双工通信的网络传输协议。这种协议被设计用于改善客户端和服务器之间实时通信的效率,允许双方同时发送和接收信息,而无需像传统HTTP请求那样轮询。

9f79e5f54cb240108201cb63fc0d0f53.png

  • CS架构:

        CS架构则是由客户端和服务器端组成的两层结构,客户端包含业务逻辑和界面展示,服务器端则负责数据管理。这种架构适用于局域网环境,能够提供快速响应和强大的事务处理能力。CS软件通常需要专门安装和维护客户端程序,因此安全性较高,个性化能力较强。然而,这也导致升级和维护成本较高,且兼容性受限于特定操作系统。

  • BS架构

        BS架构是基于浏览器和服务器的体系结构,用户界面通过Web浏览器实现,主要业务逻辑在服务器端处理。这种架构使得软件能够在不同平台上运行,客户端零维护,但个性化能力较低,响应速度相对较慢。由于不需要专门安装客户端程序,只需一个网络链接即可访问,这极大地方便了用户。然而,BS架构对网络稳定性要求较高,对硬件的直接支持较弱。    

    

服务器GUI展示      

b395e41736bb408cb39ec3f4f928af8c.png

功能(位置见上图序号)

  1. 点击按钮启动websocket服务器
  2. 一键自动识别本机 ip地址
  3. 图片接收并显示在窗口中
  4. 图片数量两张及以上时,可使用上一战,下一张切换图片
  5. 支持滚动条,按钮放大缩小图片
  6. 保存客户端发送的图片,支持自定义保存图片路径及名称
  7. 在服务器端主动向客户端发送选择的图片,并显示图片路径
  8. 必要信息输出在窗口中,方便观察。

客户端GUI展示(h5+css+js),平板,手机

80cd66f45e284398a4f07d0485288dbc.png

动图

视频 图片互传-优快云直播

一键自动获取IP地址

        所谓的自动获取ip地址,本质上是在终端中输入查询ip地址的命令,windows上使用ipconfig,linux(这里是ubuntu)和mac上使用ifconfig,但是使用python要自动获取,省去了打开终端输入命令寻找ip的步骤,就需要使用python的os库,下面请看代码

def autoip(self):
    if os.name == 'nt':
        print("当前操作系统是Windows")
        output = os.popen("ipconfig | findstr \"IPv4\"").read()
        ip = output.split("\n")
        self.myapp.ip.setText(ip[1].split(": ")[1]) 
    elif os.name == 'posix':
        print("当前操作系统是Linux")
        output = os.popen("ifconfig | awk '/inet /{print $2}'").read()
        ip = output.split("\n")
        self.myapp.ip.setText(ip[1]) 
    elif os.name == 'darwin':
        print("当前操作系统是Mac")
        output = os.popen("ifconfig en0 | awk '/inet /{print $2}'").read()
        self.myapp.ip.setText(output) 

1.判断是哪种操作系统

    通过os.name输出的字符串来判断是哪种操作系统:

  • ‘nt’ --> Windows系统
  • ‘posix’ --> Linux系统
  • ‘darwin’ --> Mac系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值