在最在研究如何用Qt來寫影像傳輸。
因為,之前學長寫的是用Qt3來修改IHU(I hear you)在原本base在tcp/udp上的應用程式,變成base在sctp上,並且可以完成handover的機制。
而我目前的目標是把影像的部分加進去。
因為Qt通常是你設定好機制之後,丟給Qt系統,系統會幫把把結果顯示出來。
而我Qt的部分是在client端,去讀取server的資料,並且顯示在client的面板上。
因此當client與server端建立連線之後,我必需要馬上讀取server端的資料。
就像我上面所說的,因為,我已經把控制權交給Qt去做了,那我怎麼知道server端有把資料送過來哩?
這個時候就要透過QSocketNotifier來監控,使得當client有東西要接收時,可以去執行相對應的函數。
這裡要記錄一下QSocketNotifier的使用方式。
也可以參考QSocketNotifier的官方說明文件
目前我只有使用到監測Read的部分,同時要注意的是要監控的是connect file descriptor
client的部分就是
::connect( connfd, (struct sockaddr*)&sa,sizeof(sa) );
而就是要監控connfd
而server的部分就是
connfd = ::accept(listenfd,(struct sockaddr *)&client_address, &client_len);
的上面那一個connfd
另外,必需注意一點的是,當因為有資料可以讀取而觸發時,若沒有立刻把QSocketNotifier刪掉,則會一直觸發這一個function,若你的資料一直沒有讀取的話。
例如:
QObject::connect( sn, SIGNAL(activated(int)),myObject, SLOT(dataReceived()) );
則
dataReceived()的內容的第一行必需為
delete sn;
如此一來才可以安心的接收資料,而不因為一直有資料要讀取,而一直觸發這一個function
沒有留言:
張貼留言