摘要:首先使用Qt的工具QtDesigner設計界面。然后進入具體的客戶端編程階段,構(gòu)造一個窗體類為TcpClient類,具體的軟件編寫如下:TcpClient::TcpClient(QWidget*parent):QWidget(parent){ui.setupUi(this);adsocket=newQTcpSocket(this);//用以傳輸A/D數(shù)據(jù)的TCP通道tempsocket=newQTcpSocket(this);//用以傳輸
TcpClient::TcpClient(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
adsocket= new QTcpSocket(this); //用以傳輸A/D數(shù)據(jù)的TCP通道
tempsocket= new QTcpSocket(this); //用以傳輸溫度數(shù)據(jù)的TCP通道
applincesocket= new QTcpSocket(this); //用以控制家用電器的TCP通道
securitysocket = new QTcpSocket(this); //用以安防系統(tǒng)報警的TCP通道
QTimer *temptimer = new QTimer(this); //2S的定時器
connect(temptimer,SIGNAL(timeout()),this,SLOT(temp_update()));
temptimer->start(2000);
connect( adsocket,SIGNAL( connected() ),this, SLOT( ad_request() ) );
connect( adsocket,SIGNAL( readyRead() ), this, SLOT( ad_readresult() ) );
connect( tempsocket,SIGNAL( connected() ),this,SLOT( lm_request() ) );
connect( tempsocket,SIGNAL( readyRead() ),this,SLOT( lm_readresult() ) );
connect(appliancesocket,SIGNAL( connected() ), this,SLOT( appliance_request() ) );
connect(securitysocket,SIGNAL( readyRead() ),this,SLOT( security_readresult() ) );
}
動態(tài)分配四個QTcpSocket(Qt 內(nèi)部對于TCP 協(xié)議的封裝類)對象,分別用該類的對象指針adsocket、tempsocket、appliancesocket、securitysocket 來指向這四個對象。然后定義一個QTimer對象,用來實現(xiàn)2 秒的定時。接著對一些信號和槽進行連接,從而完成各個組件之間的通訊,其中: QTimer 對象的timeout 信號和temp_update()槽連接、adsocket 對象的connected 信號和ad_request()連接,adsocket 對象的readyRead 信號和ad_readresult()槽。同理連接其他的幾個QTckSocket 對象的信號和槽。
以下,具體描述如何實現(xiàn)溫度檢測和空調(diào)自動控制的功能(其他功能的實現(xiàn)類似,就不贅述):(1)定時器每隔2S 觸發(fā)一次,客戶端使用tempsocket 連接服務器端后發(fā)送測溫請求。(2)接收到服務器的溫度數(shù)據(jù)后在界面上顯示,并且根據(jù)要求決定是否需要啟動空調(diào)。(3)利用appliancesocket 發(fā)送開啟或者關閉空調(diào)的命令。并根據(jù)服務器端的執(zhí)行結(jié)果修改空調(diào)開關狀態(tài)欄顯示。
五、結(jié)論
在實際的測試中,服務器端運行在實驗室,連接有日光燈、電飯煲和空調(diào)??蛻舳诉\行在寢室中。本應用在實現(xiàn)所有功能的基礎上,電力線終端作為服務器連續(xù)開機一周,并進行高流量的負荷測試,能夠穩(wěn)定運行,所有功能均表現(xiàn)正常,沒有發(fā)生故障。從而驗證了本終端的穩(wěn)定性和該智能家居應用的可行性。
通信工程師備考資料免費領取
去領取