在現在的專案開發中,經常要使用tcp/ip協議來進行通訊,但有時候與伺服器端的鏈結由於網路問題導致連線異常或斷開,這就需要我們的軟體能自動重連,在linux中,我們的思維一般是通過心跳包來監控連線是否斷開,有時候還單獨開乙個執行緒,但是在qt中,就變得簡單多了,當連線異常斷開時,會觸發相應的訊號,我們只要在這個訊號對應的槽函式中做重連處理就可以了,不需要另開執行緒也不需要心跳包。由於網上查的qt重連伺服器端,大多都是通過建立的執行緒去實現,我覺得比較麻煩,這裡就記錄下我自己的思路:使用定時器qtimer或定時器事件qtimerevent,來實現重連,當當前的連線斷開時,qt便會傳送 disconnected()訊號,我們在這個訊號對應的槽函式中開啟定時器,重連的操作就放在定時器對應的槽函式中執行(或重寫的定時器事件中執行),當重連成功後,qt會傳送connected()訊號,此時我們在其對應的槽函式中關閉定時器即可。
下邊直接來貼**,我們是建了乙個簡單的clientt類,來做乙個socket客戶端,首先是標頭檔案client.h檔案
#ifndef client_h
#define client_h
#include
#include
#include
#include
#include
#include
#include
#include
#include
class client : public qwidget
;
#endif // client_h
下邊是client.cpp檔案
#include "client.h"
#include
#include
#include
#include
#include
client::client(qwidget *parent) : qwidget(parent), m_isconnected(false)
void client::init()
void client::newtcpconnect()
}
//接收資料
void client::clientreaddata()
//連線成功是時呼叫
void client::clientconnected()
//連線斷開時呼叫
void client::clientdisconnected()
//獲取socket錯誤資訊
void client::clienterror(qabstractsocket::socketerror socketerror)
//連線狀態發生改變時獲取其狀態
void client::clientstatechange(qabstractsocket::socketstate socketstate)
else if (socketstate == qabstractsocket::hostlookupstate)
else if (socketstate == qabstractsocket::connectedstate)
else if (socketstate == qabstractsocket::connectingstate)
else if (socketstate == qabstractsocket::closingstate)
#endif
}
void client::onconnectbuttonclicked()
else if(m_connectbutton.text() == "connect")
}
void client::timerevent(qtimerevent * event)
}
}
//使用定時器來重連伺服器
void client::slottimeout()
}
client::~client()
主程式中直接使用這個類:
#include "client.h"
int main(int argc, char *argv)
編譯執行:
剛開始與伺服器端正常連線並接收資料hello sokect,然後我關掉伺服器,於是客戶端便進行重連...,後邊重開伺服器,客戶端便重連成功。
上邊是把定時器事件給遮蔽了,使用定時器來實現,也可以把定時器遮蔽,使用定時器事件進行重連,具體視專案情況而定。
客戶端與服務端的Socket通訊
客戶端 public class client catch exception e public void start else catch exception e public static void main string args catch exception e 該執行緒專門用來迴圈讀取服...
socket 實現客戶端與服務端通訊
python內的socket已經預設實現了tcp和udp兩種傳輸協議。本文通過乙個簡單的例子記錄一下socket的簡單使用方法。實現 客戶端和服務端通過tcp協議通訊,客戶端向服務端傳送訊息,服務端接收訊息後新增 too 字串後返回給客戶端,客戶端可以主動斷開連線。服務端 import socket...
服務端 客戶端Socket通訊
服務端 using system using system.collections.generic using system.net using system.net.sockets using system.text using system.text.regularexpressions usi...