QLocalSocket 類

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

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

該類在 Qt 4.4 引入。

公共類型

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

公共函數

QLocalSocket (QObject * parent = nullptr)
virtual ~QLocalSocket ()
void abort ()
void connectToServer (QIODevice::OpenMode openMode = ReadWrite)
void connectToServer (const QString & name , QIODevice::OpenMode openMode = ReadWrite)
void disconnectFromServer ()
QLocalSocket::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 , QLocalSocket::LocalSocketState socketState = ConnectedState, QIODevice::OpenMode openMode = ReadWrite)
qintptr socketDescriptor () const
QLocalSocket::LocalSocketState state () const
bool waitForConnected (int msecs = 30000)
bool waitForDisconnected (int msecs = 30000)

重實現公共函數

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

信號

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

重實現保護函數

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

詳細描述

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

若齣現錯誤, error () 返迴錯誤的類型,且 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 = nullptr)

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

[signal] void QLocalSocket:: connected ()

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

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

[signal] void QLocalSocket:: disconnected ()

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

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

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

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

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

該函數在 Qt 5.15 引入。

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

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

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

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

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

[虛擬] QLocalSocket:: ~QLocalSocket ()

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

void QLocalSocket:: abort ()

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

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

[override virtual] qint64 QLocalSocket:: bytesAvailable () const

重實現: QIODevice::bytesAvailable () const.

[override virtual] qint64 QLocalSocket:: bytesToWrite () const

重實現: QIODevice::bytesToWrite () const.

[override virtual] bool QLocalSocket:: canReadLine () const

重實現: QIODevice::canReadLine () const.

[override virtual] void QLocalSocket:: close ()

重實現: QIODevice::close ().

void QLocalSocket:: connectToServer ( QIODevice::OpenMode openMode = ReadWrite)

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

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

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

該函數在 Qt 5.1 引入。

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

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

這是重載函數。

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

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

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

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

void QLocalSocket:: disconnectFromServer ()

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

另請參閱 connectToServer ().

QLocalSocket::LocalSocketError QLocalSocket:: error () const

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

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

bool QLocalSocket:: flush ()

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

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

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

QString QLocalSocket:: fullServerName () const

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

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

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

[override virtual] bool QLocalSocket:: isSequential () const

重實現: QIODevice::isSequential () const.

bool QLocalSocket:: isValid () const

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

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

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

[override virtual] bool QLocalSocket:: open ( QIODevice::OpenMode openMode = ReadWrite)

重實現: QIODevice::open (QIODevice::OpenMode mode).

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

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

connectToServer () 瞭解更多細節。

qint64 QLocalSocket:: readBufferSize () const

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

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

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

重實現: QIODevice::readData (char *data, qint64 maxSize).

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 , QLocalSocket::LocalSocketState socketState = ConnectedState, QIODevice::OpenMode openMode = ReadWrite)

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

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

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

qintptr QLocalSocket:: socketDescriptor () const

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

套接字描述符不可用當 QLocalSocket 是在 UnconnectedState 。描述符的類型取決於平颱:

另請參閱 setSocketDescriptor ().

QLocalSocket::LocalSocketState QLocalSocket:: state () const

返迴套接字的狀態。

另請參閱 error ().

[override virtual] bool QLocalSocket:: waitForBytesWritten ( int msecs = 30000)

重實現: QIODevice::waitForBytesWritten (int msecs).

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 (若操作超時,若發生錯誤,或者若此 QLocalSocket 已經斷開連接)。若它返迴 false ,可以調用 error () 以確定錯誤的原因。

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

socket->disconnectFromServer();
if (socket->state() == QLocalSocket::UnconnectedState
    || socket->waitForDisconnected(1000)) {
    qDebug("Disconnected!");
}
					

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

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

[override virtual] bool QLocalSocket:: waitForReadyRead ( int msecs = 30000)

重實現: QIODevice::waitForReadyRead (int msecs).

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

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

另請參閱 waitForBytesWritten ().

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

重實現: QIODevice::writeData (const char *data, qint64 maxSize).