关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)

首先本人学习了一点网络通信的知识和c++以及qt的小知识,关于最近比较火的物联网视频监控做了个小项目,在这里给大家分享下图片传输这个模块,首先客户端显示是在Windows下Qt中,服务器是在linux系统ubuntu中,打开本地两张图片循环发送给Qt进行显示。当然懂了这个你只需要再学会摄像头的视频采集和图像的压缩(装库)就可以进行远程监控了。
首先我在网上搜了搜这方面的知识,好像并不多,关于qt显示图片的倒还是比较多的,但接受网络的就比较少了。好了废话不多说,先看服务器的代码:为了方便直接写在一个文件里面了
首先头文件关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)_第1张图片然后创建套接字绑定监听接受等等套路:看图关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)_第2张图片没有写注释相信大家都能看懂,然后是发图片的代码:关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)_第3张图片重点来了关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)_第4张图片相信大家也知道怎么传,这里主要说一下封包的问题,大概就是自定义协议嘛,服务器得让客户端知道我发给你的图片有多大,你按照我给你发的大小来接收图片就好了,在这里方法有很多种,说两种吧,一种是封一个固定大小的包,包头有固定字节大小的表示后面所跟的文件大小,整体封装在一个字符数组里发送,我为了偷懒所以采用的这种办法,我打开的两张图片一张50多k一样30多k,而我拿了一个60k的包来装,所以问题来了,有点空间浪费,原因还是图片大小不一造成的嘛,如果是做视频采集那个的话,图像大小相距不多也还是可以,当然这样做的优点就是我客户端每次只需要收固定包大小就好了。另一方法当然就是大小和图片分开传不打包,当然大小后面紧跟着就是图片信息,假如吧我拿10个字节封装成大小的包先发过去,10位数表示的大小也该有那么大了吧,感兴趣的自己算,当然可能用不到,但这点小空间浪费问题不大,然后这10个字节后仅跟着就发图片数据了,但qt这边接收稍微麻烦了一点点,带会儿看qt代码的时候再说。当然还有其他的方法,想封装结构体什么的我不太擅长,也没数组好用。好,服务器这边的代码相信大家都没有什么问题,毕竟我也只是有一点点基础的,这代码也就是有一点点基础的人写的,大牛们不要介意也不要喷我。
然后在看qt这边的吧,首先申明我是新手,用的也是图形化界面,对象也是直接定义的,没有去new出来,新手嘛为了图简单就这样了。
先看h文件,qt这边会给大家写注释的。关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)_第5张图片注释给大家写了,再来看对应源文件;
关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)_第6张图片注释相信大家能理解,下面是重点了,收包显示
先上图
关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)_第7张图片图片上注释写的很清楚了,待会上效果图片,在这说一个前面提到的第二种封包的(这里可以参考后面毕设文章里的封包和接收,具体应该是第三篇里),我也写点伪代码吧上图:
关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)_第8张图片上面写的一点伪代码,思路相信大家都知道了,好了现在看结果
linux下图片:
关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)_第9张图片这里只打开了两张图片循环发送,可以当gif动图了嘛,好了看效果(这里明天再补上,今晚先弄到这里(主要图片没有截哈哈,大家原谅一下))。今天把效果图补上,应该录个屏的,这里就截了两张图了;
关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)_第10张图片
关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)_第11张图片
效果就这样了。请大牛勿喷。
由于源代码或许已经找不到了,所以未有把截图替换成代码,抱歉。
详细的设计在我的graduation design里面有。

你可能感兴趣的:(Qt,Creator)