QLocalSocket 類

The QLocalSocket 類提供本地套接字。 更多...

頭: #include <QLocalSocket>
qmake: QT += network
Since: Qt 4.4
繼承: QIODevice

公共類型

enum LocalSocketError { ConnectionRefusedError, PeerClosedError, ServerNotFoundError, SocketAccessError, ..., UnknownSocketError }
enum LocalSocketState { UnconnectedState, ConnectingState, ConnectedState, ClosingState }

公共函數

QLocalSocket (QObject * parent = Q_NULLPTR)
~QLocalSocket ()
void abort ()
void connectToServer (OpenMode openMode = ReadWrite)
void connectToServer (const QString & name , OpenMode openMode = ReadWrite)
void disconnectFromServer ()
LocalSocketError error () const
bool flush ()
QString fullServerName () const
bool isValid () const
qint64 readBufferSize () const
QString serverName () const
void setReadBufferSize (qint64 size )
void setServerName (const QString & name )
bool setSocketDescriptor (qintptr socketDescriptor , LocalSocketState socketState = ConnectedState, OpenMode openMode = ReadWrite)
qintptr socketDescriptor () const
LocalSocketState state () const
bool waitForConnected (int msecs = 30000)
bool waitForDisconnected (int msecs = 30000)

重實現公共函數

virtual qint64 bytesAvailable () const
virtual qint64 bytesToWrite () const
virtual bool canReadLine () const
virtual void close ()
virtual bool isSequential () const
virtual bool open (OpenMode openMode = ReadWrite)
virtual bool waitForBytesWritten (int msecs = 30000)
virtual bool waitForReadyRead (int msecs = 30000)

信號

void connected ()
void disconnected ()
void error (QLocalSocket::LocalSocketError socketError )
void stateChanged (QLocalSocket::LocalSocketState socketState )

重實現保護函數

virtual qint64 readData (char * data , qint64 c )
virtual qint64 writeData (const char * data , qint64 c )

額外繼承成員

詳細描述

The QLocalSocket 類提供本地套接字。

在 Windows 這是命名管道,在 Unix 這是本地域套接字。

若齣現錯誤,socketError() 返迴錯誤類型,且 errorString () 可以被調用,以獲得發生什麼的人類可讀描述。

盡管 QLocalSocket 是為用於事件循環而設計的,沒有事件循環使用它是可能的。在此情況下,必須使用 waitForConnected (), waitForReadyRead (), waitForBytesWritten (),和 waitForDisconnected () 阻塞直到操作完成 (或超時到期)。

另請參閱 QLocalServer .

成員類型文檔編製

enum QLocalSocket:: LocalSocketError

LocalServerError 枚舉錶示可能發生的錯誤。最近錯誤可以被檢索透過調用 QLocalSocket::error ().

常量 描述
QLocalSocket::ConnectionRefusedError QAbstractSocket::ConnectionRefusedError 連接被對等方拒絕 (或超時)。
QLocalSocket::PeerClosedError QAbstractSocket::RemoteHostClosedError 遠程套接字關閉連接。注意:客戶端套接字 (即:此套接字) 將在遠程關閉通知發送後被關閉。
QLocalSocket::ServerNotFoundError QAbstractSocket::HostNotFoundError 本地套接字名找不到。
QLocalSocket::SocketAccessError QAbstractSocket::SocketAccessError 套接字操作失敗,因為應用程序缺乏所需特權。
QLocalSocket::SocketResourceError QAbstractSocket::SocketResourceError 本地係統資源不足 (如:太多套接字)。
QLocalSocket::SocketTimeoutError QAbstractSocket::SocketTimeoutError 套接字操作超時。
QLocalSocket::DatagramTooLargeError QAbstractSocket::DatagramTooLargeError 數據報大於操作係統的限製 (可以低至 8192 字節)。
QLocalSocket::ConnectionError QAbstractSocket::NetworkError 連接發生錯誤。
QLocalSocket::UnsupportedSocketOperationError QAbstractSocket::UnsupportedSocketOperationError 本地操作係統不支持所請求的套接字操作。
QLocalSocket::OperationError QAbstractSocket::OperationError 試圖操作當套接字處於不準許狀態時。
QLocalSocket::UnknownSocketError QAbstractSocket::UnknownSocketError 發生無法識彆的錯誤。

enum QLocalSocket:: LocalSocketState

此枚舉描述套接字可以處於的不同狀態。

常量 描述
QLocalSocket::UnconnectedState QAbstractSocket::UnconnectedState 套接字未連接。
QLocalSocket::ConnectingState QAbstractSocket::ConnectingState 套接字開始建立連接。
QLocalSocket::ConnectedState QAbstractSocket::ConnectedState 已建立連接。
QLocalSocket::ClosingState QAbstractSocket::ClosingState 套接字即將關閉 (數據可能仍在等待被寫入)。

另請參閱 QLocalSocket::state ().

成員函數文檔編製

QLocalSocket:: QLocalSocket ( QObject * parent = Q_NULLPTR)

創建新的本地套接字。 parent 自變量會被傳遞給 QObject 的構造函數。

QLocalSocket:: ~QLocalSocket ()

銷毀套接字,關閉連接 (若有必要)。

void QLocalSocket:: abort ()

中止當前連接並重置套接字。不像 disconnectFromServer (),此函數立即關閉套接字,清零任何寫入緩衝待決數據。

另請參閱 disconnectFromServer () 和 close ().

[虛擬] qint64 QLocalSocket:: bytesAvailable () const

重實現自 QIODevice::bytesAvailable ().

[虛擬] qint64 QLocalSocket:: bytesToWrite () const

重實現自 QIODevice::bytesToWrite ().

[虛擬] bool QLocalSocket:: canReadLine () const

重實現自 QIODevice::canReadLine ().

[虛擬] void QLocalSocket:: close ()

重實現自 QIODevice::close ().

void QLocalSocket:: connectToServer ( OpenMode openMode = ReadWrite)

試圖連接到 serverName (). setServerName () 必須被調用在打開連接之前。另外,您可以使用 connectToServer(const QString &name, OpenMode openMode );

套接字被打開采用給定 openMode 並首先進入 ConnectingState 。若建立連接, QLocalSocket 進入 ConnectedState 並發射 connected ().

在調用此函數後,套接字可以發射 error () 給 (發齣錯誤的) 信號。

該函數在 Qt 5.1 引入。

另請參閱 state (), serverName (),和 waitForConnected ().

void QLocalSocket:: connectToServer (const QString & name , OpenMode openMode = ReadWrite)

這是重載函數。

設置服務器 name 並試圖與它建立連接。

套接字被打開采用給定 openMode 並首先進入 ConnectingState 。若建立連接, QLocalSocket 進入 ConnectedState 並發射 connected ().

在調用此函數後,套接字可以發射 error () 給 (發齣錯誤的) 信號。

另請參閱 state (), serverName (),和 waitForConnected ().

[signal] void QLocalSocket:: connected ()

此信號被發射在 connectToServer () 有被調用且連接已成功建立。

另請參閱 connectToServer () 和 disconnected ().

void QLocalSocket:: disconnectFromServer ()

試圖關閉套接字。若有等待寫入的待決數據, QLocalSocket 將進入 ClosingState 並等待直到所有數據被寫入。最終,它將進入 UnconnectedState 並發射 disconnectedFromServer() 信號。

另請參閱 connectToServer ().

[signal] void QLocalSocket:: disconnected ()

此信號被發射當套接字斷開連接時。

另請參閱 connectToServer (), disconnectFromServer (), abort (),和 connected ().

LocalSocketError QLocalSocket:: error () const

返迴最後發生的錯誤類型。

另請參閱 state () 和 errorString ().

[signal] void QLocalSocket:: error ( QLocalSocket::LocalSocketError socketError )

此信號發射,在齣現錯誤後。 socketError 參數描述發生錯誤的類型。

QLocalSocket::LocalSocketError 不是注冊 Metatype (元類型),因此,對於隊列化連接而言,必須注冊它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().

注意: 信號 error 在此類中是重載。要使用函數指針句法連接到此信號,必須在靜態鑄造中指定信號類型,如此範例所示:

connect(localSocket, static_cast<void(QLocalSocket::*)(QLocalSocket::LocalSocketError)>(&QLocalSocket::error),
    [=](QLocalSocket::LocalSocketError socketError){ /* ... */ });
					

另請參閱 error (), errorString (),和 創建自定義 Qt 類型 .

bool QLocalSocket:: flush ()

此函數盡可能將內部寫入緩衝不阻塞地寫入套接字。若有寫入任何數據,此函數返迴 true ;否則 false 被返迴。

調用此函數若需要 QLocalSocket 立即開始發送緩衝數據。成功寫入的字節數從屬操作係統。在大多數情況下,不需調用此函數,因為 QLocalSocket 將開始自動發送數據,一旦控製迴到事件循環。若缺乏事件循環,調用 waitForBytesWritten () 代替。

另請參閱 write () 和 waitForBytesWritten ().

QString QLocalSocket:: fullServerName () const

返迴套接字連接到的服務器路徑。

注意: 此函數的返迴值是特定於平颱的。

另請參閱 connectToServer () 和 serverName ().

[虛擬] bool QLocalSocket:: isSequential () const

重實現自 QIODevice::isSequential ().

bool QLocalSocket:: isValid () const

返迴 true 若套接字是有效的且準備使用;否則返迴 false .

注意: 套接字的狀態必須為 ConnectedState 在讀寫可以發生之前。

另請參閱 state () 和 connectToServer ().

[虛擬] bool QLocalSocket:: open ( OpenMode openMode = ReadWrite)

重實現自 QIODevice::open ().

相當於 connectToServer ( OpenMode 模式)。套接字被打開采用給定 openMode 到定義服務器由 setServerName ().

注意:不像大多數其它 QIODevice 子類,open() 不能直接打開設備。函數返迴 false 若套接字已連接 (或未定義要連接的服務器);返迴 true 在任何其它情況下。 connected () 或 error () 信號會被發射一旦設備被實際打開 (或連接失敗)。

connectToServer () 瞭解更多細節。

qint64 QLocalSocket:: readBufferSize () const

返迴內部讀取緩衝尺寸。這限製客戶端可以接收的數據量先於調用 read () 或 readAll ()。0 (默認) 讀取緩衝尺寸意味著緩衝沒有大小限製,確保數據不丟失。

另請參閱 setReadBufferSize () 和 read ().

[virtual protected] qint64 QLocalSocket:: readData ( char * data , qint64 c )

重實現自 QIODevice::readData ().

QString QLocalSocket:: serverName () const

返迴對等方的名稱作為指定通過 setServerName (),或空 QString if setServerName () 尚未被調用或 connectToServer () 失敗。

另請參閱 setServerName (), connectToServer (),和 fullServerName ().

void QLocalSocket:: setReadBufferSize ( qint64 size )

設置大小為 QLocalSocket 的內部讀取緩衝到 size 字節。

若緩衝尺寸被限製到某個大小, QLocalSocket 不會緩衝超過此大小的數據。例外,0 緩衝尺寸意味著讀取緩衝是無限的且緩衝所有傳入數據。這是默認。

此選項是有用的,若僅在某個時間點讀取數據 (如:在實時流應用程序中),或者,若希望保護套接字,防止接收太多數據 (可能最終導緻應用程序內存不足)。

另請參閱 readBufferSize () 和 read ().

void QLocalSocket:: setServerName (const QString & name )

設置 name 為要連接的對等方。在 Windows 名稱是命名管道的名稱;在 Unix 名稱是本地域套接字的名稱。

此函數必須被調用,當套接字未被連接時。

該函數在 Qt 5.1 引入。

另請參閱 serverName ().

bool QLocalSocket:: setSocketDescriptor ( qintptr socketDescriptor , LocalSocketState socketState = ConnectedState, OpenMode openMode = ReadWrite)

初始化 QLocalSocket 采用本機套接字描述符 socketDescriptor 。返迴 true if socketDescriptor 被接受作為有效套接字描述符;否則返迴 false 。以指定模式打開套接字通過 openMode ,並進入指定套接字狀態通過 socketState .

注意: 采用相同本機套接字描述符初始化 2 個本地套接字是不可能的。

另請參閱 socketDescriptor (), state (),和 openMode ().

qintptr QLocalSocket:: socketDescriptor () const

返迴本地套接字描述符為 QLocalSocket 對象若這是可用的;否則返迴 -1。

套接字描述符不可用當 QLocalSocket 是在 UnconnectedState .

另請參閱 setSocketDescriptor ().

LocalSocketState QLocalSocket:: state () const

返迴套接字的狀態。

另請參閱 error ().

[signal] void QLocalSocket:: stateChanged ( QLocalSocket::LocalSocketState socketState )

此信號發射,每當 QLocalSocket 的狀態改變。 socketState 參數是新狀態。

QLocalSocket::SocketState 不是注冊 Metatype (元類型),因此,對於隊列化連接而言,必須注冊它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().

另請參閱 state () 和 創建自定義 Qt 類型 .

[虛擬] bool QLocalSocket:: waitForBytesWritten ( int msecs = 30000)

重實現自 QIODevice::waitForBytesWritten ().

bool QLocalSocket:: waitForConnected ( int msecs = 30000)

等待直到套接字被連接,最長 msecs 毫秒。若連接已建立,此函數返迴 true ;否則返迴 false 。若它返迴 false ,可以調用 error () 以確定錯誤的原因。

以下範例最多等待 1 秒為建立連接:

socket->connectToServer("market");
if (socket->waitForConnected(1000))
    qDebug("Connected!");
					

msecs 是 -1,此函數不會超時。

另請參閱 connectToServer () 和 connected ().

bool QLocalSocket:: waitForDisconnected ( int msecs = 30000)

等待直到套接字已斷開連接,最長 msecs 毫秒。若連接已斷開,此函數返迴 true ;否則返迴 false 。若它返迴 false ,可以調用 error () 以確定錯誤的原因。

以下範例最多等待 1 秒為關閉連接:

socket->disconnectFromServer();
if (socket->waitForDisconnected(1000))
    qDebug("Disconnected!");
					

msecs 是 -1,此函數不會超時。

另請參閱 disconnectFromServer () 和 close ().

[虛擬] bool QLocalSocket:: waitForReadyRead ( int msecs = 30000)

重實現自 QIODevice::waitForReadyRead ().

此函數阻塞,直到有數據可供讀取且 readyRead() 信號已被發射。函數將超時花費 msecs 毫秒;默認超時是 30000 毫秒。

函數返迴 true 若數據可用於讀取;否則它返迴 false (若發生錯誤或操作超時)。

另請參閱 waitForBytesWritten ().

[virtual protected] qint64 QLocalSocket:: writeData (const char * data , qint64 c )

重實現自 QIODevice::writeData ().