QLocalSocket 类

QLocalSocket class provides a local socket. 更多...

头: #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 = 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 error (QLocalSocket::LocalSocketError socketError )
void stateChanged (QLocalSocket::LocalSocketState socketState )

静态公共成员

const QMetaObject staticMetaObject

重实现保护函数

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

额外继承成员

详细描述

QLocalSocket class provides a local socket.

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

If an error occurs, socketError() returns the type of error, and errorString () 可以被调用,以获得发生什么的人类可读描述。

尽管 QLocalSocket is designed for use with an event loop, it's possible to use it without one. In that case, you must use 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 的构造函数。

[virtual] QLocalSocket:: ~QLocalSocket ()

销毁套接字,关闭连接 (若有必要)。

void QLocalSocket:: abort ()

中止当前连接并重置套接字。不像 disconnectFromServer (),此函数立即关闭套接字,清零任何写入缓冲待决数据。

另请参阅 disconnectFromServer () 和 close ().

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

重实现自 QIODevice::bytesAvailable ().

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

重实现自 QIODevice::bytesToWrite ().

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

重实现自 QIODevice::canReadLine ().

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

在调用此函数后,套接字可以发射 error () 给 (发出错误的) 信号。

该函数在 Qt 5.1 引入。

另请参阅 state (), serverName (),和 waitForConnected ().

void QLocalSocket:: connectToServer (const QString & name , QIODevice::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 ().

QLocalSocket::LocalSocketError QLocalSocket:: error () const

返回最后发生的错误类型。

另请参阅 state () 和 errorString ().

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

此信号被发射在发生错误之后。 socketError 参数描述发生错误的类型。

QLocalSocket::LocalSocketError 不是注册 Metatype (元类型),因此,对于队列化连接而言,必须注册它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().

注意: 信号 error 在此类中被重载。通过使用函数指针句法连接到此信号,Qt 提供用于获得如此范例展示的函数指针的方便帮助程序:

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

另请参阅 error (), errorString (),和 创建自定义 Qt 类型 .

bool QLocalSocket:: flush ()

此函数尽可能将内部写入缓冲不阻塞地写入套接字。若有写入任何数据,此函数返回 true ;否则 false 被返回。

调用此函数若需要 QLocalSocket 立即开始发送缓冲数据。成功写入的字节数从属操作系统。在大多数情况下,不需调用此函数,因为 QLocalSocket 将开始自动发送数据,一旦控制回到事件循环。若缺乏事件循环,调用 waitForBytesWritten () 代替。

另请参阅 write () 和 waitForBytesWritten ().

QString QLocalSocket:: fullServerName () const

返回套接字连接到的服务器路径。

注意: 此函数的返回值是特定于平台的。

另请参阅 connectToServer () 和 serverName ().

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

重实现自 QIODevice::isSequential ().

bool QLocalSocket:: isValid () const

返回 true 若套接字是有效的且准备使用;否则返回 false .

注意: 套接字的状态必须为 ConnectedState 在读写可以发生之前。

另请参阅 state () 和 connectToServer ().

[override virtual] bool QLocalSocket:: open ( QIODevice::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 ().

[override 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 , 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 ().

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

此信号被发射每当 QLocalSocket 的状态改变。 socketState 参数是新状态。

QLocalSocket::SocketState 不是注册 Metatype (元类型),因此,对于队列化连接而言,必须注册它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().

另请参阅 state () 和 创建自定义 Qt 类型 .

[override virtual] 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 ().

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

重实现自 QIODevice::waitForReadyRead ().

此函数阻塞直到数据可用于读取且 readyRead() 信号已被发射。函数将超时花费 msecs 毫秒;默认超时是 30000 毫秒。

函数返回 true 若数据可用于读取;否则它返回 false (若发生错误或操作超时)。

另请参阅 waitForBytesWritten ().

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

重实现自 QIODevice::writeData ().