QLocalServer

QLocalServer

繼承自QObject。

QLocalServer提供了一個基於本地套接字(socket)的服務端(server)。
QLocalServer可以接受來自本地socket的連接。
server通過調用listen(),監聽特定的連接。
newConnection()是在每次server與client連接上時所發出的信號。
nextPendingConnection()將等待中的連接當作一個已連接上的QLocalSocket。返回值是指向QLocalSocket的指針,這個QLocalSocket可以與client建立通信。
當發生錯誤時,serverError() 返回錯誤的類型,調用errorString()可以獲取對錯誤的描述。
在監聽過程中,通過 serverName()可以獲取當前server監聽的名稱。
close()使QLocalServer停止對連接請求的監聽。
雖然QLocalServer是爲在事件循環中使用而設計出來的,但是在沒有事件循環時也是可以使用的。沒有事件循環時,你必須使用waitForNewConnection(),它只在以下兩種情況下解除阻塞:1)有可用的連接;2)超時。
============================================
                            函數方法描述
============================================
QLocalServer::QLocalServer ( QObject * parent = 0 )
創建一個新的本地socket的server。
通常使用這樣的方式創建:
QLocalServer *myServer = new QLocalServer(this);


QLocalServer::~QLocalServer ()
銷燬QLocalServer對象。
如果server正在監聽連接,該方法會自動關閉這個監聽。
必須在server delete之前將當前處於連接狀態的client QLocalSockets斷開連接(或者將client的QLocalSockets重定向)。


void QLocalServer::close ()
停止監聽連接請求。
該操作不會影響已存在的連接,只是阻止新的連接。


QString QLocalServer::errorString () const
返回值是對serverError()上報的錯誤的詳細描述。
如果錯誤內容沒有適當的描述,則返回值爲空字符串。


QString QLocalServer::fullServerName () const
返回server當前所監聽的連接的完整路徑。
注意:完整路徑具有平臺差異。


bool QLocalServer::hasPendingConnections () const   [virtual]
server有等待中的連接,返回true,否則返回false。


void QLocalServer::incomingConnection ( quintptr socketDescriptor )   [virtual protected]
當一個新的連接可用時,QLocalServer會調用這個虛函數。
參數socketDescriptor是確認連接時的本地套接字描述符。
該方法主要完成:創建一個QLocalSocket,設置好socket描述符,然後將這個QLocalSocket存入到待連接的一張內部列表中。最後發送newConnection()信號。
重寫這個方法,可以在有可用連接時,改變server的行爲。


bool QLocalServer::isListening () const
server正在監聽連接,返回ture,否則返回false。


bool QLocalServer::listen ( const QString & name )
讓server去監聽名爲name的連接請求。如果server此時正處於監聽狀態,則返回false。
name可以是簡單的名字,QLocalServer將決定路徑的正確形式。
serverName()返回傳遞給listen()的name。
通常,你只需要傳入類似“foo”的name即可。在Unix上,這個name也可以是一個路徑“/tmp/foo”,在windows上name也可以指定爲一個管道路徑“\\.\pipe\foo”。
注意:在Unix上,如果server沒有關閉listen就crash了,會產生一個AddressInUseError的錯誤。要想再創建一個新的server,就需要移除這個file。在windows上,兩個本地server可以同時監聽同一個管道,此時連接請求發生時選擇的server沒有確定性,即會任意的選擇server進行連接。


int QLocalServer::maxPendingConnections () const
返回可接受的最大的等待連接數。默認爲30。


QLocalSocket * QLocalServer::nextPendingConnection ()   [virtual]
將下一個等待中的連接作爲已連接上的QLocalSocket對象返回。
創建的這個socket被當作是server的後代,這意味着當server被銷燬時,socket會被自動刪除。
爲避免內存浪費,仍然可以在使用完socket之後,顯示的刪除它。
當沒有等待的連接時,調用該函數得到的返回值爲0。


bool QLocalServer::removeServer ( const QString & name )   [static]
清除調用listen()失敗的server實例。
調用該方法可以避免因先前的server實例未被清理徹底引起的crash。
在windows上,該方法什麼都不做;在Unix上,它清除由name指定的socket。
警告:注意不要清除當前正處於運行狀態的實例的socket。


QAbstractSocket::SocketError QLocalServer::serverError () const
返回上次發生的錯誤類型。
沒有錯誤則返回NoError。


QString QLocalServer::serverName () const
如果server當前正在監聽連接,則返回server的name。
否則,返回空字符串。


void QLocalServer::setMaxPendingConnections ( int numConnections )
將可接收的最大等待連接數設置爲numConnections。
QLocalServer在調用nextPendingConnection()之前,最多隻能接受numConnections個連接請求。
注意:儘管QLocalServer在等待的連接數目達到設置的最大值之後將不再接受新的連接請求,但是操作系統仍然會將這些新的連接請求保持在等待隊列中,因爲這些請求在連接上之後會給客戶端發送信號。


bool QLocalServer::waitForNewConnection ( int msec = 0, bool * timedOut = 0 )
爲了獲得一個可用的連接請求,等待msec毫秒。
如果連接請求可用,返回ture,否則返回false。
操作超時並且timedOut不爲0,則將*timedOut設置爲ture。
這是一個阻塞調用。它通常用於簡單單線程GUI應用程序,因爲在該函數返回之前,整個應用程序將停止對其他事件的響應。
waitForNewConnection()大多使用在非事件驅動的應用程序中。
要實現該函數的功能,但又要使之不產生阻塞,參照newConnection ()信號的發送。
如果參數msec爲-1,則該函數不超時。


============================================
                       信號(可理解爲:cocoa中的notification)
============================================
void QLocalServer::newConnection ()   [signal]
每次有可用的新的連接時,就會發出這個信號。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章