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 ().