關於linux下網絡服務器和windows下Qt客戶端的通信(圖片文件顯示)

首先本人學習了一點網絡通信的知識和c++以及qt的小知識,關於最近比較火的物聯網視頻監控做了個小項目,在這裏給大家分享下圖片傳輸這個模塊,首先客戶端顯示是在Windows下Qt中,服務器是在linux系統ubuntu中,打開本地兩張圖片循環發送給Qt進行顯示。當然懂了這個你只需要再學會攝像頭的視頻採集和圖像的壓縮(裝庫)就可以進行遠程監控了。
首先我在網上搜了搜這方面的知識,好像並不多,關於qt顯示圖片的倒還是比較多的,但接受網絡的就比較少了。好了廢話不多說,先看服務器的代碼:爲了方便直接寫在一個文件裏面了
首先頭文件這裏寫圖片描述然後創建套接字綁定監聽接受等等套路:看圖這裏寫圖片描述沒有寫註釋相信大家都能看懂,然後是發圖片的代碼:這裏寫圖片描述重點來了這裏寫圖片描述相信大家也知道怎麼傳,這裏主要說一下封包的問題,大概就是自定義協議嘛,服務器得讓客戶端知道我發給你的圖片有多大,你按照我給你發的大小來接收圖片就好了,在這裏方法有很多種,說兩種吧,一種是封一個固定大小的包,包頭有固定字節大小的表示後面所跟的文件大小,整體封裝在一個字符數組裏發送,我爲了偷懶所以採用的這種辦法,我打開的兩張圖片一張50多k一樣30多k,而我拿了一個60k的包來裝,所以問題來了,有點空間浪費,原因還是圖片大小不一造成的嘛,如果是做視頻採集那個的話,圖像大小相距不多也還是可以,當然這樣做的優點就是我客戶端每次只需要收固定包大小就好了。另一方法當然就是大小和圖片分開傳不打包,當然大小後面緊跟着就是圖片信息,假如吧我拿10個字節封裝成大小的包先發過去,10位數表示的大小也該有那麼大了吧,感興趣的自己算,當然可能用不到,但這點小空間浪費問題不大,然後這10個字節後僅跟着就發圖片數據了,但qt這邊接收稍微麻煩了一點點,帶會兒看qt代碼的時候再說。當然還有其他的方法,想封裝結構體什麼的我不太擅長,也沒數組好用。好,服務器這邊的代碼相信大家都沒有什麼問題,畢竟我也只是有一點點基礎的,這代碼也就是有一點點基礎的人寫的,大牛們不要介意也不要噴我。
然後在看qt這邊的吧,首先申明我是新手,用的也是圖形化界面,對象也是直接定義的,沒有去new出來,新手嘛爲了圖簡單就這樣了。
先看h文件,qt這邊會給大家寫註釋的。這裏寫圖片描述註釋給大家寫了,再來看對應源文件;
這裏寫圖片描述註釋相信大家能理解,下面是重點了,收包顯示
先上圖
這裏寫圖片描述圖片上註釋寫的很清楚了,待會上效果圖片,在這說一個前面提到的第二種封包的,我也寫點僞代碼吧上圖:
這裏寫圖片描述上面寫的一點僞代碼,思路相信大家都知道了,好了現在看結果
linux下圖片:
這裏寫圖片描述這裏只打開了兩張圖片循環發送,可以當gif動圖了嘛,好了看效果(這裏明天再補上,今晚先弄到這裏(主要圖片沒有截哈哈,大家原諒一下))。今天把效果圖補上,應該錄個屏的,這裏就截了兩張圖了;
第一張
第二張
效果就這樣了。請大牛勿噴。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章