QAbstractSocket 类

QAbstractSocket 类提供所有套接字类型共有的基功能。 更多...

头: #include <QAbstractSocket>
CMake: find_package(Qt6 COMPONENTS Network REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
继承: QIODevice
继承者: QTcpSocket and QUdpSocket

注意: 此类的所有函数 可重入 .

公共类型

enum BindFlag { ShareAddress, DontShareAddress, ReuseAddressHint, DefaultForPlatform }
flags BindMode
enum NetworkLayerProtocol { IPv4Protocol, IPv6Protocol, AnyIPProtocol, UnknownNetworkLayerProtocol }
enum PauseMode { PauseNever, PauseOnSslErrors }
flags PauseModes
enum SocketError { ConnectionRefusedError, RemoteHostClosedError, HostNotFoundError, SocketAccessError, SocketResourceError, …, UnknownSocketError }
enum SocketOption { LowDelayOption, KeepAliveOption, MulticastTtlOption, MulticastLoopbackOption, TypeOfServiceOption, …, PathMtuSocketOption }
enum SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState }
enum SocketType { TcpSocket, UdpSocket, SctpSocket, UnknownSocketType }

公共函数

  QAbstractSocket (QAbstractSocket::SocketType socketType , QObject * parent )
virtual ~QAbstractSocket ()
void abort ()
virtual bool bind (const QHostAddress & address , quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
bool bind (QHostAddress::SpecialAddress addr , quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
bool bind (quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
virtual void connectToHost (const QString & hostName , quint16 port , QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
void connectToHost (const QHostAddress & address , quint16 port , QIODeviceBase::OpenMode openMode = ReadWrite)
virtual void disconnectFromHost ()
QAbstractSocket::SocketError error () const
bool flush ()
bool isValid () const
QHostAddress localAddress () const
quint16 localPort () const
QAbstractSocket::PauseModes pauseMode () const
QHostAddress peerAddress () const
QString peerName () const
quint16 peerPort () const
QString protocolTag () const
QNetworkProxy proxy () const
qint64 readBufferSize () const
virtual void resume ()
void setPauseMode (QAbstractSocket::PauseModes pauseMode )
void setProtocolTag (const QString & tag )
void setProxy (const QNetworkProxy & networkProxy )
virtual void setReadBufferSize (qint64 size )
virtual bool setSocketDescriptor (qintptr socketDescriptor , QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
virtual void setSocketOption (QAbstractSocket::SocketOption option , const QVariant & value )
virtual qintptr socketDescriptor () const
virtual QVariant socketOption (QAbstractSocket::SocketOption option )
QAbstractSocket::SocketType socketType () const
QAbstractSocket::SocketState state () const
virtual bool waitForConnected (int msecs = 30000)
virtual bool waitForDisconnected (int msecs = 30000)

重实现公共函数

virtual qint64 bytesAvailable () const override
virtual qint64 bytesToWrite () const override
virtual void close () override
virtual bool isSequential () const override
virtual bool waitForBytesWritten (int msecs = 30000) override
virtual bool waitForReadyRead (int msecs = 30000) override

信号

void connected ()
void disconnected ()
void errorOccurred (QAbstractSocket::SocketError socketError )
void hostFound ()
void proxyAuthenticationRequired (const QNetworkProxy & proxy , QAuthenticator * authenticator )
void stateChanged (QAbstractSocket::SocketState socketState )

保护函数

void setLocalAddress (const QHostAddress & address )
void setLocalPort (quint16 port )
void setPeerAddress (const QHostAddress & address )
void setPeerName (const QString & name )
void setPeerPort (quint16 port )
void setSocketError (QAbstractSocket::SocketError socketError )
void setSocketState (QAbstractSocket::SocketState state )

重实现保护函数

virtual qint64 readData (char * data , qint64 maxSize ) override
virtual qint64 readLineData (char * data , qint64 maxlen ) override
virtual qint64 skipData (qint64 maxSize ) override
virtual qint64 writeData (const char * data , qint64 size ) override

详细描述

QAbstractSocket 基类用于 QTcpSocket and QUdpSocket 且包含这 2 个类的全部共有功能。若需要套接字,有 2 个选项:

TCP (传输控制协议) 是可靠、面向流、面向连接的传输协议。UDP (用户数据报协议) 是不可靠,面向数据报的无连接协议。在实践中,这意味着 TCP 更适合连续数据传输,可以使用更轻量的 UDP 当可靠性不重要时。

QAbstractSocket 的 API 统一了这 2 种协议之间的大部分差异。例如,尽管 UDP 无连接, connectToHost () 为 UDP 套接字建立虚拟连接,使您能够以或多或少的相同方式使用 QAbstractSocket 不管底层协议。在内部,QAbstractSocket 记住的地址和端口会被传递给 connectToHost (),和函数像 read () 和 write () 使用这些值。

在任何时候,QAbstractSocket 都拥有状态 (返回通过 state ())。初始状态为 UnconnectedState 。后于调用 connectToHost (),套接字首先进入 HostLookupState 。若找到主机,QAbstractSocket 进入 ConnectingState 并发射 hostFound () 信号。当连接已建立时,它进入 ConnectedState 并发射 connected ()。若在任何阶段出现错误, errorOccurred () 被发射。每当状态改变时, stateChanged () 被发射。为方便起见, isValid () 返回 true 若套接字读/写就绪,但请注意,套接字状态必须为 ConnectedState 在读写可以发生之前。

读取或写入数据是通过调用 read () 或 write (),或使用方便函数 readLine () 和 readAll ()。QAbstractSocket 还继承 getChar (), putChar (),和 ungetChar () 从 QIODevice ,操控单个字节。 bytesWritten () 信号被发射当已将数据写入套接字时。注意 Qt 不限制写入缓冲大小。可以监视其大小,通过监听此信号。

readyRead () 信号被发射每当有新数据组块到达时。 bytesAvailable () 然后返回可供读取的字节数。通常,会连接 readyRead () signal to a slot and read all available data there. If you don't read all the data at once, the remaining data will still be available later, and any new incoming data will be appended to QAbstractSocket's internal read buffer. To limit the size of the read buffer, call setReadBufferSize ().

要关闭套接字,调用 disconnectFromHost (). QAbstractSocket enters QAbstractSocket::ClosingState . After all pending data has been written to the socket, QAbstractSocket actually closes the socket, enters QAbstractSocket::UnconnectedState ,和发射 disconnected ()。若想要立即中止连接,丢弃所有待决数据,调用 abort () instead. If the remote host closes the connection, QAbstractSocket will emit errorOccurred ( QAbstractSocket::RemoteHostClosedError ),在此期间,套接字状态将仍然是 ConnectedState ,然后 disconnected () 信号会被发射。

连接对等方端口和地址的抓取是通过调用 peerPort () 和 peerAddress (). peerName () 返回对等方主机名,如传递给 connectToHost (). localPort () 和 localAddress () 返回本地套接字的端口和地址。

QAbstractSocket provides a set of functions that suspend the calling thread until certain signals are emitted. These functions can be used to implement blocking sockets:

举例说明:

    int numRead = 0, numReadTotal = 0;
    char buffer[50];
    forever {
        numRead  = socket.read(buffer, 50);
        // do whatever with array
        numReadTotal += numRead;
        if (numRead == 0 && !socket.waitForReadyRead())
            break;
    }
					

waitForReadyRead() 返回 false ,连接已关闭 (或出现错误)。

按阻塞套接字编程彻底异于按非阻塞套接字编程。阻塞套接字不要求事件循环,且通常导致更简单代码。不管怎样,在 GUI 应用程序中,阻塞套接字只应用于非 GUI 线程,以避免冻结用户界面。见 fortuneclient and blockingfortuneclient 范例了解这 2 种方式的概述。

注意: 不鼓励将阻塞函数与信号一起使用。应该使用 2 种可能性之一。

QAbstractSocket can be used with QTextStream and QDataStream 的流运算符 (operator<<() 和 operator>>())。尽管有一个问题要注意:必须确保有足够数据可用,先于尝试读取它使用 operator>>().

另请参阅 QNetworkAccessManager and QTcpServer .

成员类型文档编制

[since 5.0] enum QAbstractSocket:: BindFlag
flags QAbstractSocket:: BindMode

此枚举描述的不同标志可以传递给行为修改 QAbstractSocket::bind ().

常量 描述
QAbstractSocket::ShareAddress 0x1 Allow other services to bind to the same address and port. This is useful when multiple processes share the load of a single service by listening to the same address and port (e.g., a web server with several pre-forked listeners can greatly improve response time). However, because any service is allowed to rebind, this option is subject to certain security considerations. Note that by combining this option with ReuseAddressHint, you will also allow your service to rebind an existing shared address. On Unix, this is equivalent to the SO_REUSEADDR socket option. On Windows, this is the default behavior, so this option is ignored.
QAbstractSocket::DontShareAddress 0x2 独占绑定地址和端口,所以不允许重新绑定其它服务。通过将此选项传递给 QAbstractSocket::bind (), you are guaranteed that on success, your service is the only one that listens to the address and port. No services are allowed to rebind, even if they pass ReuseAddressHint. This option provides more security than ShareAddress, but on certain operating systems, it requires you to run the server with administrator privileges. On Unix and macOS, not sharing is the default behavior for binding an address and port, so this option is ignored. On Windows, this option uses the SO_EXCLUSIVEADDRUSE socket option.
QAbstractSocket::ReuseAddressHint 0x4 提供提示为 QAbstractSocket 应该试着重新绑定服务,即使地址和端口已被另一套接字绑定。在 Windows 和 Unix,这相当于 SO_REUSEADDR 套接字选项。
QAbstractSocket::DefaultForPlatform 0x0 The default option for the current platform. On Unix and macOS, this is equivalent to (DontShareAddress + ReuseAddressHint), and on Windows, it is equivalent to ShareAddress.

该枚举在 Qt 5.0 引入或被修改。

BindMode 类型是 typedef 对于 QFlags <BindFlag>。它存储 BindFlag 值的 OR 组合。

enum QAbstractSocket:: NetworkLayerProtocol

此枚举描述用于 Qt 的网络层协议值。

常量 描述
QAbstractSocket::IPv4Protocol 0 IPv4
QAbstractSocket::IPv6Protocol 1 IPv6
QAbstractSocket::AnyIPProtocol 2 IPv4 或 IPv6
QAbstractSocket::UnknownNetworkLayerProtocol -1 除了 IPv4 和 IPv6

另请参阅 QHostAddress::protocol ().

[since 5.0] enum QAbstractSocket:: PauseMode
flags QAbstractSocket:: PauseModes

此枚举描述套接字应继续持有数据传输的行为。目前支持的唯一通知是 QSslSocket::sslErrors ().

常量 描述
QAbstractSocket::PauseNever 0x0 Do not pause data transfer on the socket. This is the default and matches the behavior of Qt 4.
QAbstractSocket::PauseOnSslErrors 0x1 暂停套接字数据传输,当收到 SSL 错误通知时。即 QSslSocket::sslErrors ().

该枚举在 Qt 5.0 引入或被修改。

PauseModes 类型是 typedef 对于 QFlags <PauseMode>。它存储 PauseMode 值的 OR 组合。

enum QAbstractSocket:: SocketError

此枚举描述可以发生的套接字错误。

常量 描述
QAbstractSocket::ConnectionRefusedError 0 连接被对等方拒绝 (或超时)。
QAbstractSocket::RemoteHostClosedError 1 远程主机关闭连接。注意,将关闭客户端套接字 (即:此套接字) 在已发送远程关闭通知后。
QAbstractSocket::HostNotFoundError 2 找不到主机地址。
QAbstractSocket::SocketAccessError 3 套接字操作失败,因为应用程序缺乏所需特权。
QAbstractSocket::SocketResourceError 4 本地系统资源不足 (如:太多套接字)。
QAbstractSocket::SocketTimeoutError 5 套接字操作超时。
QAbstractSocket::DatagramTooLargeError 6 数据报大于操作系统的限制 (可以低至 8192 字节)。
QAbstractSocket::NetworkError 7 网络出现错误 (如:网线被意外拔出)。
QAbstractSocket::AddressInUseError 8 地址指定给 QAbstractSocket::bind () 已在使用中,且被设为独占。
QAbstractSocket::SocketAddressNotAvailableError 9 地址指定给 QAbstractSocket::bind () 不属于主机。
QAbstractSocket::UnsupportedSocketOperationError 10 本地 OS 不支持请求的套接字操作 (如:缺乏 IPv6 支持)。
QAbstractSocket::ProxyAuthenticationRequiredError 12 套接字在使用代理,且代理要求身份验证。
QAbstractSocket::SslHandshakeFailedError 13 SSL/TLS 握手失败,所以连接被关闭 (仅用于 QSslSocket )
QAbstractSocket::UnfinishedSocketOperationError 11 仅用于 QAbstractSocketEngine,最后尝试的操作尚未完成 (仍在后台进行中)。
QAbstractSocket::ProxyConnectionRefusedError 14 无法联络代理服务器,因为服务器连接被拒
QAbstractSocket::ProxyConnectionClosedError 15 代理服务器连接被意外关闭 (在建立最终对等方连接前)
QAbstractSocket::ProxyConnectionTimeoutError 16 与代理服务器的连接超时 (或代理服务器在身份验证阶段停止响应)。
QAbstractSocket::ProxyNotFoundError 17 代理地址设置采用 setProxy () (或应用程序代理) 找不到。
QAbstractSocket::ProxyProtocolError 18 与代理服务器的连接协商失败,因为无法理解来自代理服务器的响应。
QAbstractSocket::OperationError 19 试图操作当套接字处于不准许状态时。
QAbstractSocket::SslInternalError 20 正使用的 SSL 库报告内部错误。这可能是坏安装库 (或库错配) 的结果。
QAbstractSocket::SslInvalidUserDataError 21 无效数据 (证书、密钥、密码、等) 的提供,且使用无效数据导致 SSL 库错误。
QAbstractSocket::TemporaryError 22 出现临时错误 (如:操作将阻塞而套接字是非阻塞的)。
QAbstractSocket::UnknownSocketError -1 发生无法识别的错误。

另请参阅 QAbstractSocket::error () 和 QAbstractSocket::errorOccurred ().

enum QAbstractSocket:: SocketOption

此枚举表示套接字可以设置的选项。若期望,可以设置它们后于收到 connected () 信号从套接字或后于收到新套接字从 QTcpServer .

常量 描述
QAbstractSocket::LowDelayOption 0 试着优化套接字为低延迟。对于 QTcpSocket 这将设置 TCP_NODELAY 选项并禁用 Nagle 算法。将此设为 1 启用。
QAbstractSocket::KeepAliveOption 1 将此设为 1 以启用 SO_KEEPALIVE 套接字选项
QAbstractSocket::MulticastTtlOption 2 将此设为整数值以设置 IP_MULTICAST_TTL (用于多点播送数据报的 TTL) 套接字选项。
QAbstractSocket::MulticastLoopbackOption 3 将此设为 1 以启用 IP_MULTICAST_LOOP (多点播送回环) 套接字选项。
QAbstractSocket::TypeOfServiceOption 4 此选项在 Windows 不支持。这映射到 IP_TOS 套接字选项。对于可能的值,见下表。
QAbstractSocket::SendBufferSizeSocketOption 5 在 OS 级别以字节为单位设置套接字发送缓冲大小。这映射到 SO_SNDBUF 套接字选项。此选项不影响 QIODevice or QAbstractSocket 缓冲。该枚举值在 Qt 5.3 引入。
QAbstractSocket::ReceiveBufferSizeSocketOption 6 在 OS 级别以字节为单位设置套接字接收缓冲大小。这映射到 SO_RCVBUF 套接字选项。此选项不影响 QIODevice or QAbstractSocket 缓冲 (见 setReadBufferSize() )。该枚举值在 Qt 5.3 引入。
QAbstractSocket::PathMtuSocketOption 7 Retrieves the Path Maximum Transmission Unit (PMTU) value currently known by the IP stack, if any. Some IP stacks also allow setting the MTU for transmission. This enum value was introduced in Qt 5.11.

可能的值对于 TypeOfServiceOption 是:

描述
224 网络控制
192 网间控制
160 CRITIC/ECP
128 刷新覆写
96 刷新
64 立即
32 优先级
0 例程

另请参阅 QAbstractSocket::setSocketOption () 和 QAbstractSocket::socketOption ().

enum QAbstractSocket:: SocketState

此枚举描述套接字可以处于的不同状态。

常量 描述
QAbstractSocket::UnconnectedState 0 套接字未连接。
QAbstractSocket::HostLookupState 1 套接字正在履行主机名查找。
QAbstractSocket::ConnectingState 2 套接字开始建立连接。
QAbstractSocket::ConnectedState 3 已建立连接。
QAbstractSocket::BoundState 4 套接字被绑定到地址和端口。
QAbstractSocket::ClosingState 6 套接字即将关闭 (数据可能仍在等待被写入)。
QAbstractSocket::ListeningState 5 仅供内部使用。

另请参阅 QAbstractSocket::state ().

enum QAbstractSocket:: SocketType

此枚举描述传输层协议。

常量 描述
QAbstractSocket::TcpSocket 0 TCP
QAbstractSocket::UdpSocket 1 UDP
QAbstractSocket::SctpSocket 2 SCTP
QAbstractSocket::UnknownSocketType -1 除了 TCP、UDP 及 SCTP

另请参阅 QAbstractSocket::socketType ().

成员函数文档编制

QAbstractSocket:: QAbstractSocket ( QAbstractSocket::SocketType socketType , QObject * parent )

创建新的抽象套接字为类型 socketType parent 自变量会被传递给 QObject 的构造函数。

另请参阅 socketType (), QTcpSocket ,和 QUdpSocket .

[signal] void QAbstractSocket:: connected ()

此信号被发射在 connectToHost () 有被调用且连接已成功建立。

注意: 在某些操作系统,可以直接发射 connected() 信号从 connectToHost () 调用对于连接到本地主机。

另请参阅 connectToHost () 和 disconnected ().

[signal] void QAbstractSocket:: disconnected ()

此信号被发射当套接字断开连接时。

警告: 若需要删除 sender () 为此信号在连接到它的槽中,使用 deleteLater() 函数。

另请参阅 connectToHost (), disconnectFromHost (),和 abort ().

[signal, since 5.15] void QAbstractSocket:: errorOccurred ( QAbstractSocket::SocketError socketError )

此信号发射,在发生错误后。 socketError 参数描述出现错误的类型。

当发射此信号时,套接字试图重新连接可能还未就绪。在此情况下,试图重新连接应该是从事件循环。例如,使用 QTimer::singleShot () 采用 0 作为超时。

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

该函数在 Qt 5.15 引入。

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

[signal] void QAbstractSocket:: hostFound ()

此信号被发射在 connectToHost () 有被调用且主机查找成功时。

注意: 从 Qt 4.6.3 起, QAbstractSocket 可以直接发射 hostFound() 从 connectToHost () 调用,由于已缓存 DNS 结果。

另请参阅 connected ().

[signal] void QAbstractSocket:: proxyAuthenticationRequired (const QNetworkProxy & proxy , QAuthenticator * authenticator )

此信号可以被发射当 proxy 要求使用身份验证。 authenticator 然后可以采用所需的详细信息填充对象,以允许身份验证并继续连接。

注意: 使用 QueuedConnection 去连接到此信号是不可能的,因为连接会失败,若身份验证器没有采新信息被填充,当信号返回时。

另请参阅 QAuthenticator and QNetworkProxy .

[signal] void QAbstractSocket:: stateChanged ( QAbstractSocket::SocketState socketState )

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

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

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

[虚拟] QAbstractSocket:: ~QAbstractSocket ()

销毁套接字。

void QAbstractSocket:: abort ()

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

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

[virtual, since 5.0] bool QAbstractSocket:: bind (const QHostAddress & address , quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

绑定到 address 在端口 port ,使用 BindMode mode .

对于 UDP 套接字,绑定后信号 QUdpSocket::readyRead () 被发射每当 UDP 数据报到达指定地址和端口时。因此,此函数对编写 UDP 服务器很有用。

对于 TCP 套接字,此函数可以用于指定对外连接要使用哪个接口,在多网络接口情况下很有用。

默认情况下,绑定套接字使用 DefaultForPlatform BindMode 。若端口未指定,选择随机端口。

当成功时,函数返回 true 和套接字进入 BoundState ;否则,返回 false .

该函数在 Qt 5.0 引入。

[since 6.2] bool QAbstractSocket:: bind ( QHostAddress::SpecialAddress addr , quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

这是重载函数。

绑定到特殊地址 addr 在端口 port ,使用 BindMode mode .

默认情况下,绑定套接字使用 DefaultForPlatform BindMode 。若端口未指定,选择随机端口。

该函数在 Qt 6.2 引入。

[since 5.0] bool QAbstractSocket:: bind ( quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

这是重载函数。

绑定到 QHostAddress :任何在端口 port ,使用 BindMode mode .

默认情况下,绑定套接字使用 DefaultForPlatform BindMode 。若端口未指定,选择随机端口。

该函数在 Qt 5.0 引入。

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

重实现: QIODevice::bytesAvailable () const.

返回等待读取的传入字节数。

另请参阅 bytesToWrite () 和 read ().

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

重实现: QIODevice::bytesToWrite () const.

返回等待写入的字节数。写入字节当控制回到事件循环或当 flush () 被调用。

另请参阅 bytesAvailable () 和 flush ().

[override virtual] void QAbstractSocket:: close ()

重实现: QIODevice::close ().

关闭 I/O 设备为套接字和调用 disconnectFromHost () 以关闭套接字连接。

QIODevice::close () 了解当关闭 I/O 设备时出现动作的描述。

另请参阅 abort ().

[虚拟] void QAbstractSocket:: connectToHost (const QString & hostName , quint16 port , QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)

试图连接到 hostName 在给定 port protocol 参数可以用于指定要使用哪种网络协议 (如 IPv4 或 IPv6)。

套接字被打开采用给定 openMode 并首先进入 HostLookupState ,然后履行查找主机名 hostName 。若查找成功, hostFound () 被发射和 QAbstractSocket 进入 ConnectingState 。然后,试图连接到地址 (或由查找返回的地址)。最后,若建立连接, QAbstractSocket 进入 ConnectedState 并发射 connected ().

在任何时候,套接字可以发射 errorOccurred () 给 (发出错误的) 信号。

hostName 可以是字符串形式的 IP 地址 (如 43.195.83.32),或者它可以是主机名 (如 example.com)。 QAbstractSocket 将仅在要求时才查找。 port 是本机字节序。

另请参阅 state (), peerName (), peerAddress (), peerPort (),和 waitForConnected ().

void QAbstractSocket:: connectToHost (const QHostAddress & address , quint16 port , QIODeviceBase::OpenMode openMode = ReadWrite)

这是重载函数。

试图连接到 address 在端口 port .

[虚拟] void QAbstractSocket:: disconnectFromHost ()

试图关闭套接字。若有等待写入的待决数据, QAbstractSocket 将进入 ClosingState 并等待直到所有数据被写入。最终,它将进入 UnconnectedState 和发射 disconnected () 信号。

另请参阅 connectToHost ().

QAbstractSocket::SocketError QAbstractSocket:: error () const

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

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

bool QAbstractSocket:: flush ()

此函数不阻塞且尽可能多地,把内部缓冲写入到底层网络套接字。若有写入任何数据,此函数返回 true ;否则 false 被返回。

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

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

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

重实现: QIODevice::isSequential () const.

bool QAbstractSocket:: isValid () const

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

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

另请参阅 state ().

QHostAddress QAbstractSocket:: localAddress () const

返回本地套接字的主机地址 (若可用); 否则返回 QHostAddress::Null .

这通常是主机的主 IP 地址,但也可以是 QHostAddress::LocalHost (127.0.0.1) 对于到本地主机的连接。

另请参阅 localPort (), peerAddress (),和 setLocalAddress ().

quint16 QAbstractSocket:: localPort () const

返回本地套接字的主机端口号 (按本机字节序),若可用;否则返回 0。

另请参阅 localAddress (), peerPort (),和 setLocalPort ().

[since 5.0] QAbstractSocket::PauseModes QAbstractSocket:: pauseMode () const

返回此套接字的暂停模式。

该函数在 Qt 5.0 引入。

另请参阅 setPauseMode () 和 resume ().

QHostAddress QAbstractSocket:: peerAddress () const

返回被连接对等方的地址,若套接字处于 ConnectedState ;否则返回 QHostAddress::Null .

另请参阅 peerName (), peerPort (), localAddress (),和 setPeerAddress ().

QString QAbstractSocket:: peerName () const

返回对等方的名称作为指定通过 connectToHost (),或空 QString if connectToHost () 没有被调用。

另请参阅 peerAddress (), peerPort (),和 setPeerName ().

quint16 QAbstractSocket:: peerPort () const

返回被连接对等方的端口,若套接字处于 ConnectedState ;否则返回 0。

另请参阅 peerAddress (), localPort (),和 setPeerPort ().

[since 5.13] QString QAbstractSocket:: protocolTag () const

Returns the protocol tag for this socket. If the protocol tag is set then this is passed to QNetworkProxyQuery when this is created internally to indicate the protocol tag to be used.

该函数在 Qt 5.13 引入。

另请参阅 setProtocolTag () 和 QNetworkProxyQuery .

QNetworkProxy QAbstractSocket:: proxy () const

返回此套接字的网络代理。默认情况下 QNetworkProxy::DefaultProxy 被使用,意味着此套接字将查询应用程序的默认代理设置。

另请参阅 setProxy (), QNetworkProxy ,和 QNetworkProxyFactory .

qint64 QAbstractSocket:: readBufferSize () const

返回内部读取缓冲尺寸。这限制客户端可以接收的数据量先于调用 read () 或 readAll ().

0 (默认) 读取缓冲尺寸意味着缓冲没有大小限制,确保数据不丢失。

另请参阅 setReadBufferSize () 和 read ().

[override virtual protected] qint64 QAbstractSocket:: readData ( char * data , qint64 maxSize )

重实现: QIODevice::readData (char *data, qint64 maxSize).

[override virtual protected] qint64 QAbstractSocket:: readLineData ( char * data , qint64 maxlen )

重实现: QIODevice::readLineData (char *data, qint64 maxSize).

[virtual, since 5.0] void QAbstractSocket:: resume ()

继续在套接字中传输数据。才应该使用此方法仅在套接字被设为当通知时暂停且有收到通知之后。目前唯一支持的通知是 QSslSocket::sslErrors ()。调用此方法导致不确定行为若套接字未暂停。

该函数在 Qt 5.0 引入。

另请参阅 pauseMode () 和 setPauseMode ().

[protected] void QAbstractSocket:: setLocalAddress (const QHostAddress & address )

将连接的本地端地址设为 address .

可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 localAddress () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。

注意,此函数不绑定套接字的本地地址在连接之前 (如 QAbstractSocket::bind ()).

另请参阅 localAddress (), setLocalPort (),和 setPeerAddress ().

[protected] void QAbstractSocket:: setLocalPort ( quint16 port )

将连接的本地端端口设为 port .

可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 localPort () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。

注意,此函数不绑定套接字的本地端口在连接之前 (如 QAbstractSocket::bind ()).

另请参阅 localPort (), localAddress (), setLocalAddress (),和 setPeerPort ().

[since 5.0] void QAbstractSocket:: setPauseMode ( QAbstractSocket::PauseModes pauseMode )

控制当收到通知时是否暂停。 pauseMode 参数指定套接字应暂停的条件。目前唯一支持的通知是 QSslSocket::sslErrors ()。若设为 PauseOnSslErrors ,套接字数据传输将暂停且再次启用需要明确调用 resume ()。默认情况下,此选项被设为 PauseNever 。必须调用此选项在连接到服务器之前,否则它将导致未定义行为。

该函数在 Qt 5.0 引入。

另请参阅 pauseMode () 和 resume ().

[protected] void QAbstractSocket:: setPeerAddress (const QHostAddress & address )

将连接的远程端地址设为 address .

可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 peerAddress () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。

另请参阅 peerAddress (), setPeerPort (),和 setLocalAddress ().

[protected] void QAbstractSocket:: setPeerName (const QString & name )

将远程对等方主机名设为 name .

可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 peerName () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。

另请参阅 peerName ().

[protected] void QAbstractSocket:: setPeerPort ( quint16 port )

将连接的远程端端口设为 port .

可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 peerPort () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。

另请参阅 peerPort (), setPeerAddress (),和 setLocalPort ().

[since 5.13] void QAbstractSocket:: setProtocolTag (const QString & tag )

把此套接字的协议 Tag 设为 tag .

该函数在 Qt 5.13 引入。

另请参阅 protocolTag ().

void QAbstractSocket:: setProxy (const QNetworkProxy & networkProxy )

将此套接字的显式网络代理设为 networkProxy .

要禁用此套接字所用代理,使用 QNetworkProxy::NoProxy 代理类型:

socket->setProxy(QNetworkProxy::NoProxy);
					

代理的默认值为 QNetworkProxy::DefaultProxy ,意味着套接字将使用应用程序设置:若代理设置采用 QNetworkProxy::setApplicationProxy ,将使用它;否则,若工厂设置采用 QNetworkProxyFactory::setApplicationProxyFactory ,它将查询该工厂按类型 QNetworkProxyQuery::TcpSocket .

另请参阅 proxy (), QNetworkProxy ,和 QNetworkProxyFactory::queryProxy ().

[虚拟] void QAbstractSocket:: setReadBufferSize ( qint64 size )

设置尺寸为 QAbstractSocket 的内部读取缓冲到 size 字节。

若缓冲尺寸被限制到某个大小, QAbstractSocket 不会缓冲超过此大小的数据。例外,0 缓冲尺寸意味着读取缓冲是无限的且缓冲所有传入数据。这是默认值。

此选项是有用的若仅在某时间点读取数据 (如:在实时流应用程序中),或者,若希望保护套接字以免接收太多数据 (可能最终导致应用程序内存不足)。

QTcpSocket 使用 QAbstractSocket 的内部缓冲; QUdpSocket 根本不使用任何缓冲,而是依赖于由操作系统提供的隐式缓冲。因为这,调用此函数在 QUdpSocket 不起作用。

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

[虚拟] bool QAbstractSocket:: setSocketDescriptor ( qintptr socketDescriptor , QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)

初始化 QAbstractSocket 采用本机套接字描述符 socketDescriptor 。返回 true if socketDescriptor 被接受作为有效套接字描述符;否则返回 false 。以指定模式打开套接字通过 openMode ,并进入指定套接字状态通过 socketState 。清零读写缓冲,丢弃任何待决数据。

注意: 采用同一本机套接字描述符初始化 2 个抽象套接字,是不可能的。

另请参阅 socketDescriptor ().

[protected] void QAbstractSocket:: setSocketError ( QAbstractSocket::SocketError socketError )

将最后出现的错误类型设为 socketError .

另请参阅 setSocketState () 和 setErrorString ().

[虚拟] void QAbstractSocket:: setSocketOption ( QAbstractSocket::SocketOption option , const QVariant & value )

设置给定 option 到描述值 value .

注意: 在 Windows 运行时, QAbstractSocket::KeepAliveOption 必须在连接套接字之前设置。

另请参阅 socketOption ().

[protected] void QAbstractSocket:: setSocketState ( QAbstractSocket::SocketState state )

把套接字的状态设为 state .

另请参阅 state ().

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

重实现: QIODevice::skipData (qint64 maxSize).

[虚拟] qintptr QAbstractSocket:: socketDescriptor () const

返回本地套接字描述符为 QAbstractSocket 对象若这是可用的;否则返回 -1。

若套接字正使用 QNetworkProxy ,返回的描述符可能不能用于本机套接字函数。

套接字描述符不可用当 QAbstractSocket 是在 UnconnectedState .

另请参阅 setSocketDescriptor ().

[虚拟] QVariant QAbstractSocket:: socketOption ( QAbstractSocket::SocketOption option )

返回值为 option 选项。

另请参阅 setSocketOption ().

QAbstractSocket::SocketType QAbstractSocket:: socketType () const

返回套接字类型 (TCP、UDP、或其它)。

另请参阅 QTcpSocket and QUdpSocket .

QAbstractSocket::SocketState QAbstractSocket:: state () const

返回套接字的状态。

另请参阅 error ().

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

重实现: QIODevice::waitForBytesWritten (int msecs).

此函数阻塞,直到至少一字节被写入套接字和 bytesWritten() 信号已被发射。函数将超时花费 msecs 毫秒;默认超时是 30000 毫秒。

函数返回 true bytesWritten () 信号被发射;否则,返回 false (若发生错误或操作超时)。

注意: 该函数在 Windows 可能随机失败。考虑使用事件循环和 bytesWritten () 信号若软件会在 Windows 运行。

另请参阅 waitForReadyRead ().

[虚拟] bool QAbstractSocket:: waitForConnected ( int msecs = 30000)

等待直到套接字被连接,最长 msecs 毫秒。若连接已建立,此函数返回 true ;否则,返回 false 。若它返回 false ,可以调用 error () 以确定错误的原因。

以下范例最多等待 1 秒为建立连接:

socket->connectToHost("imap", 143);
if (socket->waitForConnected(1000))
    qDebug("Connected!");
					

若 msecs 为 -1,此函数不会超时。

注意: 此函数的等待时间可能稍微长于 msecs ,从属完成主机查找所花费的时间。

注意: 多次调用此函数不累计时间。若函数超时,连接过程将中止。

注意: 该函数在 Windows 可能随机失败。考虑使用事件循环和 connected () 信号若软件会在 Windows 运行。

另请参阅 connectToHost () 和 connected ().

[虚拟] bool QAbstractSocket:: waitForDisconnected ( int msecs = 30000)

等待直到套接字已断开连接,最长 msecs 毫秒。若连接被成功断开连接,此函数返回 true ;否则,返回 false (若操作超时,若发生错误,或者若此 QAbstractSocket 已经断开连接)。若它返回 false ,可以调用 error () 以确定错误的原因。

以下范例最多等待 1 秒为关闭连接:

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

若 msecs 为 -1,此函数不会超时。

注意: 该函数在 Windows 可能随机失败。考虑使用事件循环和 disconnected () 信号若软件会在 Windows 运行。

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

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

重实现: QIODevice::waitForReadyRead (int msecs).

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

函数返回 true readyRead () 信号被发射且有新的数据可供读取;否则它返回 false (若发生错误或操作超时)。

注意: 该函数在 Windows 可能随机失败。考虑使用事件循环和 readyRead () 信号若软件会在 Windows 运行。

另请参阅 waitForBytesWritten ().

[override virtual protected] qint64 QAbstractSocket:: writeData (const char * data , qint64 size )

重实现: QIODevice::writeData (const char *data, qint64 maxSize).