① Qt Socket網路編程 伺服器端提示QIODevice::read (QTcpSocket): device not open,但是與客戶端連接成功
這是因為文件路徑不對造成的,解決方法如下:
1、首先pro文件配置:Qt網路功能需要在pro文件增加網路庫。
② 解決QT的QWebsocket系統BUG,Mask為0導致網路連接斷開的問題
項目使用qwebsocket。沒想到發現一個大bug。
客戶端建立5000連接同時發送心跳包給伺服器,然後頻繁會有連接斷開。
伺服器找到原因,QWebsocket的數據幀的mask值(大概是個十六進制的東西)錯誤,這個東西的最高位必須不能為0才可以,硬性規定,否則伺服器會強制關閉這個連接。導致客戶端收到「遠程伺服器連接斷開」的error。
解決方法:
QT的QWebsocket有個介面,叫做setMaskGenerator,可以設置mask生成器,具體如下:
CMaskGenerator * m_mask = new CMaskGenerator();
QWebSocket* qwskt= new QWebSocket();
qwskt->setMaskGenerator(m_mask);
CMaskGenerator 類:
class CMaskGenerator : public QMaskGenerator
{
Q_DISABLE_COPY(CMaskGenerator)
public:
CMaskGenerator(QObject *parent = Q_NULLPTR) :QMaskGenerator(parent)
{
}
virtual quint32 nextMask()
{
quint32 val = quint32((double(qrand()) / RAND_MAX) * std::numeric_limits<quint32>::max());
while (val == 0)
{
seed();
val = quint32((double(qrand()) / RAND_MAX) * std::numeric_limits<quint32>::max());
}
return val;
}
virtual bool seed()
{
qsrand(QDateTime::currentDateTime().toTime_t());
return true;
}
private:
};
親測此問題解決了,代碼不必修改,直接可以用。
quint32((double(qrand()) / RAND_MAX) * std::numeric_limits<quint32>::max());
是Qt原本的隨機規則,它不為0就沒有問題,但我不知此值的具體要求(上限等等),所以只能沿用Qt的這個隨機規則,用循環保證它不為0
③ 我開的QT窗口化玩的CF,還開的迅游加速器,為什麼玩一會就提示網路連接不穩定
尊敬的用戶您好,
加速效果是基於您的本地網路狀況及穩定性的,同時也和您選擇的模式節點有關,建議您手動更換不同的節點和模式再嘗試連接。選擇穩定、沒有丟包率、延時較低的節點,模式可以選擇的都需要您親自嘗試一下
感謝您的支持
④ QT登陸不上去,顯示「連接伺服器超時,請檢查您的網路,稍後重試。」
好像QT伺服器負載!我上次以為是這種情況 上次我用的是WIFI,我後來沒用WIFI了,直接用網線
⑤ 為什麼我qt登不上啊,老是連接伺服器超時
寬頻連接不上怎麼辦:
一. 右鍵單擊「我的電腦」--屬性--硬體--設備管理器,查看網卡驅動裡面有沒有帶黃色問號或者感嘆號的項,如果有,說明網卡驅動沒有安裝,安裝網卡驅動即可。如果沒有帶黃色問號或者感嘆號的項,則按下法執行:
1.確認你的network connections服務已經正常啟動
右鍵單擊「我的電腦」--管理--服務和應用程序--服務,右邊窗口查看 network connections服務是否啟動,如果沒有啟動,將其設為啟動。
2。在運行中鍵入如下命令注冊3個組件:
regsvr32 netshell.dll regsvr32 netcfgx.dll
regsvr32 netman.dll 重啟機器就可以了!
3.建立寬頻連接即可,方法如下:
右鍵單擊「網上鄰居」--屬性--創建一個新的連接--下一步--點選「連接到internet」--下一步--點選「手動設置我的連接」--下一步--點選「用要求用戶名和密碼的寬頻連接來連接」--下一步--輸入「isp名稱」,例如:「寬頻連接」--下一步--輸入「用戶名」和「密碼」(根據簽署的協議填寫),並確認密碼,勾選下面的兩項。下一步--勾選「在桌面上添加一個到此連接的快捷方式」,點「完成」按鈕即可。
4.打開網上鄰居--在左側欄網路任務下--查看網路連接,就可以顯示本地連接和寬頻連接。如果需要重新建立寬頻連接的話,你可以將原來的寬頻連接刪除,點擊創建一個新的連接,就會彈出的連接向導,按照提示,重新建立寬頻連接就可以了。
5.設置連接屬性
(1)本地連接:開始—連接到—顯示所有連接—右擊本地連接—屬性—常規—點選Internet協議(TCP/IP)--屬性—(在設置之前,在運行里輸入CMD 然後輸入ipconfig /ALL就可以看到之前自己使用的IP地址),依次填入IP地址及默認網關即可。一般情況下使用下面的IP地址(供參考)
IP地址:192.168.0.2
子網掩碼:255.255.255.0
默認網關:192.168.0.1。
⑥ Qt 怎麼判斷網路是否斷開
------解決方案--------------------
如果有自己的伺服器就好了 :)
否則就ping一個相對可靠的IP
------解決方案--------------------
如果是伺服器客戶端,互發心跳包
------解決方案--------------------
QHostInfo::lookupHost("www..com", this, SLOT(lookedUp(QHostInfo)));
void lookedUp(QHostInfo &host)
{
qDebug() << host.addresses().first().toString();
}
得到IP 地址 就是在互聯網上 如果不能得到 就不行 用個定時器 每五秒鍾一次 就OK了
------解決方案--------------------
也可以這樣
QProcess *cmd
cmd->start("ping www..com");
qDebug() << cmd->readAll() ;
就是看他ping的結果怎麼樣.
⑦ linux中qt無法連接網路
安裝好Qt開發工具後,打開Qt發現如果是空白頁面,有以下幾種情況:
1、可能是你沒有安裝好~就算是使用官方的命令進行安裝的,也是有這種情況的~
2、跟網路沒有關系,你只安裝了Qt沒有安裝相應的插件~
解決辦法:
在Qt官網下載最新版本的Qt,然後進行安裝~~~
⑧ qt檢測網卡是否啟用
在Qt中判斷網路是否連接有兩種方式
其中一種是網路連接但是不一定能上網,可能只是連接了網線或者Wi-Fi,但不一定能夠上互聯網。另一種判斷該網路是否可以連接互聯網,兩種情況的判別方式有所區別。
⑨ Qt網路編程 伺服器異常斷開,不能檢查到網路狀態變化
自己做心跳保活。因為異常斷開不屬於qt的處理范圍,而tcp協議棧又不存在自動處理異常斷線的功能,tcp連接在不正常關閉情況下通常都會被協議棧保持存活一段時間(具體和操作系統協議棧實現和設置有關)。qt無法獲得tcp協議棧的狀態消息,也就不會做出任何反應。所謂心跳機制請參照以下網址內容:
http://ke..com/view/4372209.htm