本页内容

QLocalSocket Class

QLocalSocket 类提供了一个本地套接字。更多内容...

头文件: #include <QLocalSocket>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
继承自: QIODevice

公共类型

enum LocalSocketError { ConnectionRefusedError, PeerClosedError, ServerNotFoundError, SocketAccessError, SocketResourceError, …, UnknownSocketError }
enum LocalSocketState { UnconnectedState, ConnectingState, ConnectedState, ClosingState }
(since 6.2) enum SocketOption { NoOptions, AbstractNamespaceOption }
flags SocketOptions

属性

公共函数

QLocalSocket(QObject *parent = nullptr)
virtual ~QLocalSocket()
void abort()
QBindable<QLocalSocket::SocketOptions> bindableSocketOptions()
void connectToServer(QIODeviceBase::OpenMode openMode = ReadWrite)
void connectToServer(const QString &name, QIODeviceBase::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, QIODeviceBase::OpenMode openMode = ReadWrite)
void setSocketOptions(QLocalSocket::SocketOptions option)
qintptr socketDescriptor() const
QLocalSocket::SocketOptions socketOptions() 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(QIODeviceBase::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 readLineData(char *data, qint64 maxSize) override
virtual qint64 skipData(qint64 maxSize) 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::ConnectionRefusedErrorQAbstractSocket::ConnectionRefusedError连接被对端拒绝(或超时)。
QLocalSocket::PeerClosedErrorQAbstractSocket::RemoteHostClosedError远程套接字关闭了连接。请注意,在发送远程关闭通知后,客户端套接字(即此套接字)将被关闭。
QLocalSocket::ServerNotFoundErrorQAbstractSocket::HostNotFoundError未找到本地套接字名称。
QLocalSocket::SocketAccessErrorQAbstractSocket::SocketAccessError由于应用程序缺乏所需的权限,套接字操作失败。
QLocalSocket::SocketResourceErrorQAbstractSocket::SocketResourceError本地系统资源耗尽(例如,套接字过多)。
QLocalSocket::SocketTimeoutErrorQAbstractSocket::SocketTimeoutError套接字操作超时。
QLocalSocket::DatagramTooLargeErrorQAbstractSocket::DatagramTooLargeError数据报大小超过了操作系统的限制(该限制可能低至 8192 字节)。
QLocalSocket::ConnectionErrorQAbstractSocket::NetworkError连接发生错误。
QLocalSocket::UnsupportedSocketOperationErrorQAbstractSocket::UnsupportedSocketOperationError本地操作系统不支持所请求的套接字操作。
QLocalSocket::OperationErrorQAbstractSocket::OperationError在套接字处于不允许该操作的状态下尝试执行了该操作。
QLocalSocket::UnknownSocketErrorQAbstractSocket::UnknownSocketError发生了一个未识别的错误。

enum QLocalSocket::LocalSocketState

该枚举描述了套接字可能处于的各种状态。

常量值描述
QLocalSocket::UnconnectedStateQAbstractSocket::UnconnectedState套接字未连接。
QLocalSocket::ConnectingStateQAbstractSocket::ConnectingState套接字已开始建立连接。
QLocalSocket::ConnectedStateQAbstractSocket::ConnectedState已建立连接。
QLocalSocket::ClosingStateQAbstractSocket::ClosingState套接字即将关闭(可能仍有数据等待写入)。

另请参阅 QLocalSocket::state()。

[since 6.2] enum QLocalSocket::SocketOption
flags QLocalSocket::SocketOptions

此枚举描述了用于连接服务器的可用选项。目前,在 Linux 和 Android 系统上,它用于指定连接到监听绑定到抽象地址的套接字的服务器。

常量值描述
QLocalSocket::NoOptions0x00未设置任何选项。
QLocalSocket::AbstractNamespaceOption0x01套接字将尝试连接到一个抽象地址。此标志仅适用于 Linux 和 Android 平台。在其他平台上将被忽略。

该枚举在 Qt 6.2 中引入。

SocketOptions 类型是QFlags<SocketOption> 的 typedef。它存储 SocketOption 值的按“或”运算组合。

另请参阅 socketOptions 。

属性文档

[bindable, since 6.2] socketOptions : SocketOptions

注意:此 属性支持QProperty 绑定。

该属性保存套接字选项。

必须在套接字处于UnconnectedState 状态时设置这些选项。

该枚举在 Qt 6.2 中引入。

访问函数:

QLocalSocket::SocketOptions socketOptions() const
void setSocketOptions(QLocalSocket::SocketOptions option)

另请参阅 connectToServer()。

成员函数文档

QLocalSocket::QLocalSocket(QObject *parent = nullptr)

创建一个新的本地套接字。parent 参数将作为参数传递给QObject 的构造函数。

[virtual noexcept] 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()。

关闭套接字对应的 I/O 设备,并调用disconnectFromServer() 来关闭套接字的连接。

有关关闭 I/O 设备时执行的操作说明,请参阅QIODevice::close()。

另请参阅 abort()。

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

尝试连接到serverName()。在建立连接之前,必须先调用setServerName()。或者,您可以使用 connectToServer(constQString &name, OpenMode openMode);

套接字将在给定的openMode 中打开,并首先进入ConnectingState 状态。如果建立了连接,QLocalSocket 将进入ConnectedState 状态,并触发connected()。

调用此函数后,套接字可发出errorOccurred() 信号,以指示发生了错误。

另请参阅 state()、serverName() 和waitForConnected()。

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

设置服务器name 并尝试与其建立连接。

套接字在给定的openMode 上打开,并首先进入ConnectingState 状态。如果建立了连接,QLocalSocket 将进入ConnectedState 状态,并发出connected() 信号。

调用此函数后,套接字可发出errorOccurred() 信号,以指示发生错误。

这是一个重载函数。

另请参阅 state()、serverName() 和waitForConnected()。

[signal] void QLocalSocket::connected()

在调用connectToServer() 并成功建立连接后,会发出此信号。

另请参阅 connectToServer() 和disconnected()。

void QLocalSocket::disconnectFromServer()

尝试关闭套接字。如果存在待写入的数据,QLocalSocket 将进入ClosingState 状态,并等待直至所有数据写入完毕。最终,它将进入UnconnectedState 状态,并发出disconnected()信号。

另请参阅 connectToServer()。

[signal] void QLocalSocket::disconnected()

当套接字断开连接时,会发出此信号。

另请参阅 connectToServer()、disconnectFromServer()、abort() 以及connected() 函数。

QLocalSocket::LocalSocketError QLocalSocket::error() const

返回上次发生的错误类型。

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

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

该信号在发生错误后发出。socketError 参数描述了发生的错误类型。

另请参阅 error() 和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(QIODeviceBase::OpenMode openMode = ReadWrite)

重写了:QIODevice::open (QIODeviceBase::OpenMode 模式)。

等同于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)。

[override virtual protected] qint64 QLocalSocket::readLineData(char *data, qint64 maxSize)

重写了:QIODevice::readLineData (char *data, qint64 maxSize)。

QString QLocalSocket::serverName() const

返回由setServerName() 指定的对等方名称;如果尚未调用setServerName() 或connectToServer() 调用失败,则返回空的QString 。

另请参阅 setServerName()、connectToServer() 和fullServerName()。

void QLocalSocket::setReadBufferSize(qint64 size)

将QLocalSocket 的内部读取缓冲区大小设置为size 字节。

如果缓冲区大小被限制为特定值,QLocalSocket 不会缓冲超过该大小数据。例外情况是,缓冲区大小为 0 时,表示读取缓冲区无限制,所有传入数据都会被缓冲。这是默认行为。

如果仅在特定时间点读取数据(例如在实时流媒体应用程序中),或者希望保护套接字免于接收过多数据(这最终可能导致应用程序内存不足),则此选项非常有用。

另请参阅 readBufferSize() 和read()。

void QLocalSocket::setServerName(const QString &name)

设置要连接的对等方的name 。在 Windows 系统中,name 是命名管道的名称;在 Unix 系统中,name 是本地域套接字的名称。

必须在套接字未连接时调用此函数。

另请参阅 serverName()。

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

使用本机套接字描述符socketDescriptor 初始化QLocalSocket 。如果socketDescriptor 被接受为有效的套接字描述符,则返回true ;否则返回false 。套接字将以openMode 指定的模式打开,并进入socketState 指定的套接字状态。

注意:无法 使用同一个本机套接字描述符初始化两个本地套接字。

另请参阅 socketDescriptor()、state() 和openMode()。

[override virtual protected] qint64 QLocalSocket::skipData(qint64 maxSize)

重实现了:QIODevice::skipData (qint64 maxSize)。

qintptr QLocalSocket::socketDescriptor() const

如果QLocalSocket 对象的本地套接字描述符可用,则返回该描述符;否则返回-1。

当 `QLocalSocket ` 处于 `UnconnectedState` 状态时,该套接字描述符不可用。描述符的类型取决于平台:

  • 在 Windows 上,返回值是一个Winsock 2 套接字句柄。
  • 在 INTEGRITY 模式下,返回值为QTcpSocket 套接字描述符,其类型由socketDescriptor 定义。
  • 在所有其他类 UNIX 操作系统上,该类型是一个表示套接字的文件描述符。

另请参阅 setSocketDescriptor()。

QLocalSocket::LocalSocketState QLocalSocket::state() const

返回套接字的状态。

另请参阅 error()。

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

每当QLocalSocket 的状态发生变化时,都会触发此信号。socketState 参数即为新的状态。

另请参阅 state()。

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

重写了:QIODevice::waitForBytesWritten (int msecs)。

bool QLocalSocket::waitForConnected(int msecs = 30000)

等待套接字建立连接,最长等待时间为msecs 毫秒。如果连接已建立,该函数返回true ;否则返回false 。如果返回false ,可以调用error()来确定错误原因。

以下示例最多等待一秒钟以建立连接:

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()来确定错误原因。

以下示例最多等待一秒钟,直到连接关闭:

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)。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.