1、 tcpip協議
沒什麼好說的,號稱保證傳輸準確可靠,使命必達。協議很大一坨,實際應用上用得上的很少。
2 、問題所在
在使用tcp協議跟伺服器連線後(分別測試過windows系統,ubuntu系統 微控制器帶tcpip協議的通訊模組)都發現不能及時反饋或反饋 網路已斷;(在同一個區域網內和公共網路上都一樣,起初懷疑會不會ubuntu系統的網路卡驅動有問題,後來發現windows系統也一樣,用的是wifi聯網)。最後只能說會不會是路由不是實時的。
3 、解決方法
根據qt的說明文件是試錯,各種方法都用過;反正你把網線拔了,Qt 的tcpsocket類依然是沒有發現網路已斷,傳送依然是正常的。(本以為qt的這個類會比通用的tcp ip類會好點,一個鳥樣,至於keepalive的選項,statechange也不可用,會不會很多tcp伺服器也要使用keepalive的選項才能使用有效果,以後有時間試一下);現在解決方法有兩個: 1)使用心跳包方式;每秒傳送一次伺服器應答一次;很耗CPU資源;2)(推薦)在自己的傳送函式上socket_send(qbytedata msg)檢測qtcpsocket state的狀態,假如狀態不是connnected,就重新連線;因為在路由上接上目標ip的伺服器後,這邊 statechange才會生效(拔線或掉線不會生效)。