小成開發日記----利用Qt/C++在騰訊雲/阿里雲伺服器搭建TCP/IP協議實現網路通訊以及Qt在linux下的安裝和程式打包踩坑(詳解)
作者:小成Charles
原創作品
轉載請標註原創文章地址:https://blog.csdn.net/weixin_42999453/article/details/110140831
引言
最近兩天一直在研究網路通訊的相關程式設計,以前一直侷限於在區域網的通訊測試,因為很少做這一方面的開發就買了個伺服器研究了很久,由於自身的計網基礎比較差,所以也踩了不少的坑!這裡開發用騰訊雲的Linux centos 7
系統做案列
這是程式執行截圖
程式原始碼下載地址:
一、安裝Qt準備好linux系統和linuxdeployqt
這一點很重要,linux
系統可以是centos7
,也可以是uanbntu
,主要是將qt寫好的程式碼編譯執行然後打包成linux
可執行檔案,這樣就可以放在服務裡運行了。這裡我們可以用圖形介面演示,更加的直觀一點,關於如何安裝qt 可以參考此文章《centos7 安裝QT5.12》
如果要打包可執行程式最好的方法就是用linuxdeployqt
,如何使用打包參考此文章《使用linuxdeployqt在linux下進行Qt打包釋出(超詳細)》
安裝注意以下幾點:
- 選擇
linux
系統不要過於的新,也不要過於的舊 - 高版本的
Linux
配高版本的Qt
軟體,低版本同理 - 第一次配置可能會缺少亂七八糟的庫,缺啥就下載啥就好了
linuxdeployqt
在最新版本的linux
上無法通過編譯,所以千萬不要安裝最新的linux
系統,LTS長期支援版本就好了- 如果真的因為版本太新無法執行
linuxdeployqt
的話可以下載原始碼,更改main.cpp
程式碼,camke
生成程式,具體自行百度
二、配置伺服器執行測試程式
可以去阿里雲/騰訊雲購買,這兩家我都買過,不論是買輕量級應用伺服器還是ESC雲伺服器都可以,前者適合搭建個人網站,一鍵搭建很方便,後者就是純粹的liunx系統,光禿禿的,可以自由發揮,當然初學者的話想鍛鍊我推薦第二種ESC雲伺服器,更加靈活一點!這裡以騰訊雲的ESC伺服器為例,一些初始化配置自由發揮啦!
這裡連線伺服器我用了xshell
這個軟體,由於我測試通訊的伺服器是帶GUI圖形化介面
的,所以伺服器必須先下載好介面庫,具體安裝參考此文章《centos7安裝圖形化介面圖文詳解》
之後就是把打包好的可執行包上傳到伺服器上,這裡我使用的是xftp
這個軟體,然後執行,記得第一次執行程式之前先給程式許可權開啟chmod 777
,大家應該都懂。
這裡執行的是圖形介面的程式,所以用到了xmanager
這個程式去調出來介面,然後就OK啦
總結:這裡用到的三個軟體就是xshell,xftp,xmanager
全家桶
三、關於公網ip地址監聽問題
我一開始監聽的地址就直接是公網ip的地址,然後就導致一直午飯監聽,程式報錯為“The address is not avalible.”
,我就很奇怪,然後問了騰訊雲的客服,給我的解釋就是伺服器內部不支援監聽公網地址,如果需要實現監聽公網地址需要開通eip直通
,具體可以看一下文章《ip和EIP的區別》,但是轉成eip資費太貴了,總之就是普通的公網ip沒有對映到你的主機上,而EIP可以直接對映到你的主機上,在程式裡面你能監聽的是主機層次上有的ip地址,所以你沒辦法去監聽普通的公網IP,那我們怎麼實現監聽呢?
後來我發現騰訊雲的網絡卡設定上預設的把公網ip得知和內網ip的地址綁定了,那麼就說明我們直接監聽內網IP地址不就好了嗎!
果不其然,監聽成功!可以連線通訊了!!!!!
總結:直接監聽內網Ip地址即可,因為購買的伺服器預設公網繫結的是內網ip 地址
注意:
- 如果還是無法連線,那十有八九是防火牆的埠沒開啟,騰訊雲伺服器可以安全組裡面編輯出站入站的規則,開放你要開放的埠,地址就填內網的地址。
- 這裡用的是帶圖形介面的做測試,那真正的專案長期執行伺服器當然不要帶圖形介面啦!
- 這是一個踩坑日記,後續有別的還會補,希望能幫到像我一樣的新手玩家!
程式原始碼下載地址:
- IAR完全配置keil程式碼風格
- JavaScript-快速入門
- 細數高光時刻,2020全球科技巨頭如何激戰AI?
- 隨機生成字元
- 原創 | CRUD更要知道的Spring事務傳播機制
- 如何縮短IDEA行號的距離
- three.js 設定渲染幀數 FPS
- 2021年1月DB-Engines流行度排行:Snowflake五倍躍遷 Azure SQL雲資料庫倍增
- 高階架構師用10年曆練出的一份快取使用總結
- 有的年輕人不講武德,竟然給我公司漂亮的HR小姐姐“下毒”~
- vi工作模式(3種)以及模式切換(轉換)
- SUSE Linux 的Zypper包管理器使用例項
- 你想逆向我的 js 程式碼?呵呵,先過了我的反 debug 再說吧!
- 建立oracle發郵件job導致的故障
- Facebook開源資料高效影象Transformer,媲美SOTA CNN
- 【復旦大學】重讀資本論-王德峰 資本論筆記
- lsusb命令-在系統中顯示有關USB裝置資訊
- 有生之年必看!千古第一奇書《山海經》到底是怎樣的一本書?
- 2020年12月更新 Centos 6無法使用yum解決辦法,之前的都已失效
- C 服務編譯耗時優化原理及實踐