The QLocalSocket 類提供本地套接字。 更多...
| 頭: | #include <QLocalSocket> |
| Since: | Qt 4.4 |
| 繼承: | QIODevice |
| enum | LocalSocketError { ConnectionRefusedError, PeerClosedError, ServerNotFoundError, SocketAccessError, ..., UnknownSocketError } |
| enum | LocalSocketState { UnconnectedState, ConnectingState, ConnectedState, ClosingState } |
| QLocalSocket (QObject * parent = 0) | |
| ~QLocalSocket () | |
| void | abort () |
| 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 ) |
| bool | setSocketDescriptor (quintptr socketDescriptor , LocalSocketState socketState = ConnectedState, OpenMode openMode = ReadWrite) |
| quintptr | 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 | 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 () 阻塞直到操作完成 (或超時到期)。
Note that this feature is not supported on versions of Windows earlier than Windows XP.
另請參閱 QLocalServer .
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::UnknownSocketError
|
QAbstractSocket::UnknownSocketError
|
發生無法識彆的錯誤。 |
此枚舉描述套接字可以處於的不同狀態。
| 常量 | 值 | 描述 |
|---|---|---|
QLocalSocket::UnconnectedState
|
QAbstractSocket::UnconnectedState
|
套接字未連接。 |
QLocalSocket::ConnectingState
|
QAbstractSocket::ConnectingState
|
套接字開始建立連接。 |
QLocalSocket::ConnectedState
|
QAbstractSocket::ConnectedState
|
已建立連接。 |
QLocalSocket::ClosingState
|
QAbstractSocket::ClosingState
|
套接字即將關閉 (數據可能仍在等待被寫入)。 |
另請參閱 QLocalSocket::state ().
創建新的本地套接字。 parent 自變量會被傳遞給 QObject 的構造函數。
銷毀套接字,關閉連接 (若有必要)。
中止當前連接並重置套接字。不像 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 ().
試圖連接到 name .
套接字被打開采用給定 openMode 並首先進入 ConnectingState 。然後,試圖連接到地址 (或由查找返迴的地址)。最後,若建立連接, QLocalSocket 進入 ConnectedState 並發射 connected ().
在任何時候,套接字可以發射 error () 給 (發齣錯誤的) 信號。
另請參閱 state (), serverName (),和 waitForConnected ().
[signal]
void
QLocalSocket::
connected
()
此信號發射後於 connectToServer () 有被調用且連接已成功建立。
另請參閱 connectToServer () 和 disconnected ().
試圖關閉套接字。若有等待寫入的待決數據, QLocalSocket 將進入 ClosingState 並等待直到所有數據被寫入。最終,它將進入 UnconnectedState 並發射 disconnectedFromServer() 信號。
另請參閱 connectToServer ().
[signal]
void
QLocalSocket::
disconnected
()
此信號被發射當套接字斷開連接時。
另請參閱 connectToServer (), disconnectFromServer (), abort (),和 connected ().
返迴最後發生的錯誤類型。
另請參閱 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 類型 .
This function writes as much as possible from the internal write buffer to the socket, without blocking. If any data was written, this function returns true; otherwise false is returned.
調用此函數若需要 QLocalSocket 立即開始發送緩衝數據。成功寫入的字節數從屬操作係統。在大多數情況下,不需調用此函數,因為 QLocalSocket 將開始自動發送數據,一旦控製迴到事件循環。若缺乏事件循環,調用 waitForBytesWritten () 代替。
另請參閱 write () 和 waitForBytesWritten ().
返迴套接字連接到的服務器路徑。
注意: 此函數的返迴值是特定於平颱的。
另請參閱 connectToServer () 和 serverName ().
[虛擬]
bool
QLocalSocket::
isSequential
() const
重實現自 QIODevice::isSequential ().
Returns true if the socket is valid and ready for use; otherwise returns false.
注意: 套接字的狀態必須為 ConnectedState 在讀寫可以發生之前。
另請參閱 state () 和 connectToServer ().
返迴內部讀取緩衝尺寸。這限製客戶端可以接收的數據量先於調用 read () 或 readAll ()。0 (默認) 讀取緩衝尺寸意味著緩衝沒有大小限製,確保數據不丟失。
另請參閱 setReadBufferSize () 和 read ().
[virtual protected]
qint64
QLocalSocket::
readData
(
char
*
data
,
qint64
c
)
重實現自 QIODevice::readData ().
返迴對等方的名稱作為指定通過 connectToServer (),或空 QString if connectToServer () has not been called or it failed.
另請參閱 connectToServer () 和 fullServerName ().
設置大小為 QLocalSocket 的內部讀取緩衝到 size 字節。
若緩衝尺寸被限製到某個大小, QLocalSocket 不會緩衝超過此大小的數據。例外,0 緩衝尺寸意味著讀取緩衝是無限的且緩衝所有傳入數據。這是默認。
此選項是有用的,若僅在某個時間點讀取數據 (如:在實時流應用程序中),或者,若希望保護套接字,防止接收太多數據 (可能最終導緻應用程序內存不足)。
另請參閱 readBufferSize () 和 read ().
初始化 QLocalSocket 采用本機套接字描述符 socketDescriptor . Returns true if socketDescriptor is accepted as a valid socket descriptor; otherwise returns false. The socket is opened in the mode specified by openMode ,並進入指定套接字狀態通過 socketState .
注意: 采用相同本機套接字描述符初始化 2 個本地套接字是不可能的。
另請參閱 socketDescriptor (), state (),和 openMode ().
返迴本地套接字描述符為 QLocalSocket 對象若這是可用的;否則返迴 -1。
套接字描述符不可用當 QLocalSocket 是在 UnconnectedState .
另請參閱 setSocketDescriptor ().
返迴套接字的狀態。
另請參閱 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 ().
等待直到套接字被連接,最長 msecs milliseconds. If the connection has been established, this function returns true; otherwise it returns false. In the case where it returns false, you can call error () 以確定錯誤的原因。
以下範例最多等待 1 秒為建立連接:
socket->connectToServer("market"); if (socket->waitForConnected(1000)) qDebug("Connected!");
若 msecs 是 -1,此函數不會超時。
另請參閱 connectToServer () 和 connected ().
等待直到套接字已斷開連接,最長 msecs milliseconds. If the connection has been disconnected, this function returns true; otherwise it returns false. In the case where it returns false, you can call 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 毫秒。
The function returns true if data is available for reading; otherwise it returns false (if an error occurred or the operation timed out).
另請參閱 waitForBytesWritten ().
[virtual protected]
qint64
QLocalSocket::
writeData
(const
char
*
data
,
qint64
c
)
重實現自 QIODevice::writeData ().