QLocalSocket類

【轉自:】http://blog.csdn.net/abby_sheen/article/details/7623647

QLocalSocket類提供了一個本地套接字。

在Windows這是一個命名管道,在Unix下這是一個本地網域套接字。
如果發生錯誤,socketError()返回錯誤的類型,errorString()返回錯誤的描述。
雖然QLocalSocket是一個事件循環使用而設計,它也可以不被如此使用。在這種情況下,您必須使用waitForConnected(),waitForReadyRead(),waitForBytesWritten()和waitForDisconnected()的塊,直到操作完成或超時過期。
注意:此功能不支持windows xp之前的windows系統。
============================================
                            函數方法描述
============================================
QLocalSocket::QLocalSocket ( QObject * parent = 0 )
創建一個新的本地套接字。
通常使用這樣的方式創建:
QLocalSocket *mySocket = new QLocalSocket(this);


QLocalSocket::~QLocalSocket ()
銷燬套接字。如有連接,關閉連接。


void QLocalSocket::abort ()
終止當前連接,並重置socket。
與disconnectFromServer()不同,abort()是立即關閉socket,並且清除掉寫緩存中未處理的數據。


qint64 QLocalSocket::bytesAvailable () const   [virtual]
重新實現 QIODevice::bytesAvailable().
返回可以讀取的input數據的字節數,也就是返回輸入緩存的大小。


qint64 QLocalSocket::bytesToWrite () const   [virtual]
重新實現 QIODevice::bytesToWrite().
返回正在等待被寫的數據的字節數,也就是返回輸出緩存的大小。


bool QLocalSocket::canReadLine () const   [virtual]
重新實現 QIODevice::canReadLine().
如果這一次可以從這個套接字中讀取一個完整行的文本,返回ture,否則返回false。
注意:如果意外的關閉連接,這個函數將返回false。


void QLocalSocket::close ()   [virtual]
重新實現 QIODevice::close().
關閉套接字。
清空讀緩存。
如果輸出緩存是空的,狀態被設置成UnconnectedState,連接立即被終止。
如果輸出緩存中還有數據要寫,socket進入ClosingState狀態,當數據寫入完成之後,狀態被設置成UnconnectedState,終止連接。併發送disconnectFromServer()信號。


void QLocalSocket::connectToServer ( const QString & name, OpenMode openMode = ReadWrite )
嘗試創建一個到name的連接。
The socket以給定的openMode方式開啓,並首先進入ConnectingState狀態。
然後The socket嘗試連接到指定地址或查找到的地址。
最後,如果成功的建立起了連接,QLocalSocket進入ConnectedState狀態,併發送connected()的信號。
在這個過程中的任何時候,只要有錯誤發生,the socket都會發送error()的信號。


void QLocalSocket::disconnectFromServer ()
嘗試着關閉socket。
如果緩存中仍有等待寫入的數據,QLocalSocket將進入ClosingState狀態,然後等待,直到所有數據寫完,
QLocalSocket進入UnconnectedState狀態,發送disconnected()信號。


bool QLocalSocket::flush ()
flush()能夠無阻塞的將內部寫緩存中的數據儘可能多的寫入到socket中。
當有任何數據被寫入時,該方法返回值爲true,否則返回值爲false。
當你需要QLocalSocket立即發送緩存中的數據時,可以調用該方法。一次性成功寫入多少個字符取決於操作系統。
大多數情況下,你不需要調用該方法,因爲一旦事件循環得到了控制權之後,QLocalSocket就會自動的開始發送數據。
當沒有事件循環時,一般是調用waitForBytesWritten(),而不是直接調用flush()。


QString QLocalSocket::fullServerName () const
返回socket連接到的server path。
注意:返回值因操作系統不同存在差異。


bool QLocalSocket::isSequential () const   [virtual]
重新實現 QIODevice::isSequential().


bool QLocalSocket::isValid () const
當the socket是合法的並且準備好了,該方法返回ture,否則返回false。
注意:the socket進行讀,寫之前,一定是處於ConnectedState狀態。


qint64 QLocalSocket::readBufferSize () const
該方法返回內部讀緩存的size。
這個size是在調用read()和readAll()之前,限制client接收數據的大小,
如果讀緩存的size是0(默認值),意味着讀緩存沒有size限制,可以確保沒有數據丟失。


qint64 QLocalSocket::readData ( char * data, qint64 c )   [virtual protected]
重新實現 QIODevice::readData().


QString QLocalSocket::serverName () const
返回由connectToServer()的參數指定的server的name。
如果沒有調用connectToServer(),或者連接失敗,返回空字符串。


void QLocalSocket::setReadBufferSize ( qint64 size )
設置QLocalSocket內部讀緩存的字節數。
如果設置了指定的size,QLocalSocket最多隻能緩存該size大小的數據。
默認的size爲0,意味着size沒有限制,所有進來的數據都將放在緩存中。
設置size常用於:及時讀取數據,或者保護socket免於接收太多數據而造成內存消耗時。


bool QLocalSocket::setSocketDescriptor ( quintptr socketDescriptor, LocalSocketState socketState = ConnectedState, OpenMode openMode = ReadWrite )
使用本地套接字描述符socketDescriptor完成QLocalSocket的初始化。
socketDescriptor被接受爲有效的本地套接字時,返回true,否則返回false。
設置的套接字以給定的openMode方式打開,並進入由socketState指定的狀態。
注意:不能使用同一個本地套接字描述符完成兩個本地套接字的初始化。


quintptr QLocalSocket::socketDescriptor () const
如果有可用的QLocalSocket對象,則返回本地套接字描述符。否則,返回-1。
當QLocalSocket處於UnconnectedState狀態時,本地套接字描述符是無效的。


LocalSocketState QLocalSocket::state () const
返回the socket的狀態。


bool QLocalSocket::waitForBytesWritten ( int msecs = 30000 )   [virtual]
重新實現 QIODevice::waitForBytesWritten().


bool QLocalSocket::waitForConnected ( int msecs = 30000 )
爲了使the socket連接上,等待msecs毫秒。
如果連接成功,返回true。連接不成功,返回false。
當返回false時,可以調用error()來獲取失敗的原因。
當時間超過mescs,連接仍然不成功,則返回false,通過error()可以得到超時錯誤的信息。
如果msecs==-1,表明調用該方法不會超時。


bool QLocalSocket::waitForDisconnected ( int msecs = 30000 )
見waitForConnected ( int msecs = 30000 )的描述。


bool QLocalSocket::waitForReadyRead ( int msecs = 30000 )   [virtual]
重新實現 QIODevice::waitForReadyRead().
該方法在數據準備好且發出readyRead()信號之前,是阻塞的。
超時之後,返回超時錯誤。
默認的msecs是30000毫秒。
當數據準備好了,返回ture;否則返回false。


qint64 QLocalSocket::writeData ( const char * data, qint64 c )   [virtual protected]
重新實現 QIODevice::writeData().


============================================
                       信號(可理解爲:cocoa中的notification)
============================================
void QLocalSocket::connected ()   [signal]
調用connectToServer(),並且成功建立了連接之後,發送connected () 信號。


void QLocalSocket::disconnected ()   [signal]
當socket已經被斷開後,發送disconnected ()信號。


void QLocalSocket::error ( QLocalSocket::LocalSocketError socketError )   [signal]
當有錯誤發生時,會發送error()信號。
參數socketError表明錯誤的類型。
QLocalSocket::LocalSocketError不是註冊的metatype類型,所以在隊列連接中需要使用Q_DECLARE_METATYPE() 和 qRegisterMetaType()註冊之。


void QLocalSocket::stateChanged ( QLocalSocket::LocalSocketState socketState )   [signal]
只要QLocalSocket的狀態發生改變,就會發送stateChanged()消息。
參數socketState表示新的狀態。
發佈了10 篇原創文章 · 獲贊 7 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章