class QAbstractSocket#

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

Inheritance diagram of PySide6.QtNetwork.QAbstractSocket

继承自: QUdpSocketQTcpSocketQSslSocket

概述#

方法#

虚函数#

信号#

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译存在问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来通知我们

详细描述#

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

QAbstractSocketQTcpSocketQUdpSocket 的基类,并包含这两个类所有的公共功能。如果您需要套接字,您有两个选项

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

QAbstractSocket 的API统一了这两种协议之间的大多数差异。例如,尽管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 还从 QIODevice 继承了 getChar()、putChar() 和 ungetChar(),它们用于处理单个字节。当数据被写入套接字时,会发出 bytesWritten() 信号。注意,Qt 不限制写缓冲区的大小。您可以通过监听此信号来监视其大小。

每当有新的数据块到达时,会发出 readyRead() 信号。随后,bytesAvailable() 返回可读取的字节数。通常,您会将 readyRead() 信号连接到一个槽,并在该槽中读取所有可用数据。如果您一次没有读取所有数据,则剩余数据将仍然在稍后可用,并且任何新的传入数据将附加到 QAbstractSocket 的内部读取缓冲区。要限制读取缓冲区的大小,请调用 setReadBufferSize()

要关闭套接字,请调用 disconnectFromHost() . QAbstractSocket 将进入 ClosingState 状态。在将所有挂起数据写入套接字后,QAbstractSocket 实际关闭套接字,进入 UnconnectedState 状态,并发出 disconnected() 信号。如果您想立即中止连接,且放弃所有挂起数据,可以调用 abort()。如果远程主机关闭连接,QAbstractSocket 将发出 errorOccurredRemoteHostClosedError),在此期间套接字状态仍然为 ConnectedState 状态,然后也会发出 disconnected() 信号。

可以通过调用 peerPort()peerAddress() 获取已连接对等的端口和地址。 peerName() 返回对等方的计算机名,如传递给 connectToHost() 时的内容一样。《a class="reference internal" href="#PySide6.QtNetwork.QAbstractSocket.localPort" title="PySide6.QtNetwork.QAbstractSocket.localPort">localPort()localAddress() 返回本地套接字的端口和地址。

QAbstractSocket 提供一组函数,在发送特定信号之前会暂停调用线程。这些函数可以用来实现阻塞套接字。

  • waitForConnected() 会阻塞直到连接建立。

  • 方法 waitForReadyRead() 将阻塞,直到有新的数据可读。

  • 方法 waitForBytesWritten() 将阻塞,直到数据的一个有效负载已写入套接字。

  • waitForDisconnected() 将阻塞,直到连接关闭。

我们提供了一个示例

numRead = 0, numReadTotal = 0
buffer[50] = char()
forever {
    numRead = socket.read(buffer, 50)
    # do whatever with array
    numReadTotal += numRead
    if numRead == 0 and not socket.waitForReadyRead():
        break

如果 waitForReadyRead() 返回 false,则表示连接已关闭或发生了错误。

使用阻塞套接字编程与使用非阻塞套接字编程截然不同。阻塞套接字无需事件循环,通常导致代码更加简单。然而,在图形用户界面应用程序中,阻塞套接字应仅在非GUI线程中使用,以避免冻结用户界面。请参阅 fortuneclientblockingfortuneclient 示例,了解两种方法的概述。

注意

我们不建议将阻塞函数与信号一起使用。应使用其中一种可能性。

QAbstractSocket 可以与 QTextStream 和 QDataStream 的流运算符(运算符<<() 和 >>())一起使用。不过需要注意一个问题:在尝试使用运算符>>()读取数据之前,必须确保有足够的数据可用。

class SocketType#

此枚举描述了传输层协议。

常量

说明

QAbstractSocket.TcpSocket

TCP

QAbstractSocket.UdpSocket

UDP

QAbstractSocket.SctpSocket

SCTP

QAbstractSocket.UnknownSocketType

除TCP、UDP和SCTP之外的其他类型

另请参阅

socketType()

class NetworkLayerProtocol#

此枚举描述了Qt中使用的网络层协议值。

常量

说明

QAbstractSocket.IPv4Protocol

IPv4

QAbstractSocket.IPv6Protocol

IPv6

QAbstractSocket.AnyIPProtocol

IPv4或IPv6中的任一协议

QAbstractSocket(UnknownNetworkLayerProtocol)

除IPv4和IPv6之外的其他协议

另请参阅

protocol()

class SocketError#

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

常量

说明

QAbstractSocket.ConnectionRefusedError

对端拒绝连接(或超时)。

QAbstractSocket.RemoteHostClosedError

远程主机关闭了连接。请注意,在发送远程关闭通知后,客户端套接字(即此套接字)将被关闭。

QAbstractSocket.HostNotFoundError

找不到主机地址。

QAbstractSocket.SocketAccessError

由于应用程序缺乏所需的特权,套接字操作失败。

QAbstractSocket.SocketResourceError

本地系统资源耗尽(例如,套接字过多)。

QAbstractSocket.SocketTimeoutError

套接字操作超时。

QAbstractSocket.DatagramTooLargeError

数据报的大小超过了操作系统的限制(可能低至8192字节)。

QAbstractSocket.NetworkError

网络发生错误(例如,网络线被意外拔出)。

QAbstractSocket.AddressInUseError

指定给bind()的地址已被使用,且设置为独占。

QAbstractSocket.SocketAddressNotAvailableError

指定给bind()的地址不属于主机。

QAbstractSocket.UnsupportedSocketOperationError

请求的套接字操作不受本地操作系统支持(例如,缺乏IPv6支持)。

QAbstractSocket.ProxyAuthenticationRequiredError

套接字正在使用代理,并且代理需要身份验证。

QAbstractSocket.SslHandshakeFailedError

SSL/TLS握手失败,因此关闭了连接(仅用于QSslSocket

QAbstractSocket.UnfinishedSocketOperationError

仅由QAbstractSocketEngine使用,尝试执行的最后一个操作尚未完成(仍在后台进行)。

QAbstractSocket.ProxyConnectionRefusedError

由于连接到该服务器被拒绝,无法联系到代理服务器

QAbstractSocket.ProxyConnectionClosedError

意外地关闭了与代理服务器的连接(在建立与最终对等方的连接之前)

QAbstractSocket.ProxyConnectionTimeoutError

连接到代理服务器的超时或代理服务器停止在身份验证阶段响应

QAbstractSocket.ProxyNotFoundError

未找到使用setProxy()(或应用程序代理)设置的代理地址。

QAbstractSocket.ProxyProtocolError

由于代理服务器的响应无法理解,与代理服务器的连接谈判失败。

QAbstractSocket.OperationError

在套接字处于不允许执行操作的状态时尝试执行操作。

QAbstractSocket.SslInternalError

使用的SSL库报告了内部错误。这可能是库的安装不良或配置错误的结果。

QAbstractSocket.SslInvalidUserDataError

提供了无效的数据(证书、密钥、加密等),并且在SSL库中使用它导致发生错误。

QAbstractSocket.TemporaryError

发生了一个临时错误(例如,操作会阻塞,而套接字是非阻塞的)。

QAbstractSocket.UnknownSocketError

发生了未识别的错误。

另请参阅

error() errorOccurred()

class SocketState#

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

常量

说明

QAbstractSocket.UnconnectedState

套接字未连接。

QAbstractSocket.HostLookupState

套接字正在执行主机名查找。

QAbstractSocket.ConnectingState

套接字已开始建立连接。

QAbstractSocket.ConnectedState

建立了连接。

QAbstractSocket.BoundState

套接字绑定到了一个地址和端口。

QAbstractSocket.ClosingState

套接字即将关闭(可能还有数据等待写入)。

QAbstractSocket.ListeningState

仅用于内部使用。

另请参阅

state()

class SocketOption#

此枚举表示可以设置在套接字上的选项。如果需要,它们可以在从套接字接收到 connected() 信号或者从 QTcpServer 接收到新的套接字之后进行设置。

常量

说明

QAbstractSocket.LowDelayOption

尝试优化套接字以获得低延迟。对于 QTcpSocket 而言,这会设置 TCP_NODELAY 选项并禁用 Nagle 算法。将其设置为 1 以启用。

QAbstractSocket.KeepAliveOption

将此设置为 1 以启用 SO_KEEPALIVE 套接字选项。

QAbstractSocket.MulticastTtlOption

将该值设置为整数以设置 IP_MULTICAST_TTL(多播数据包的 TTL)套接字选项。

QAbstractSocket.MulticastLoopbackOption

将此设置为 1 以启用 IPMulticastLoopback 套接字选项。

QAbstractSocket.TypeOfServiceOption

此选项在 Windows 上不受支持。它对应于 IP_TOS 套接字选项。有关可能的值,请参见下表。

QAbstractSocket.SendBufferSizeSocketOption

在操作系统的级别上设置套接字发送缓冲区大小(以字节数)。它对应于 SO_SNDBUF 套接字选项。此选项不影响 QIODevice 或 QAbstractSocket 缓冲区。此枚举值是在 Qt 5.3 中引入的。

QAbstractSocket.ReceiveBufferSizeSocketOption

在操作系统级别上设置套接字接收缓冲区大小(以字节数)。它对应于 SO_RCVBUF 套接字选项。此选项不影响 QIODevice 或 QAbstractSocket 缓冲区(请参见 setReadBufferSize())。此枚举值是在 Qt 5.3 中引入的。

QAbstractSocket.PathMtuSocketOption

如果有的话,检索当前 IP 堆栈所知的路径最大传输单元(PMTU)值。某些 IP 堆栈还允许设置传输的 MTU。此枚举值是在 Qt 5.11 中引入的。

TypeOfServiceOption 的可能值

说明

224

网络控制

192

网络间控制

160

CRITIC/ECP

128

闪光器覆盖

96

闪光器

64

立即执行

32

优先级

0

常规

自版本 4.6起新增。

class BindFlag#

(继承自 enum.Flag) 此枚举描述了您可以传递到 bind() 中以修改其行为的不同标志。

常量

说明

QAbstractSocket.ShareAddress

允许其他服务绑定到相同的地址和端口。这在多个进程通过监听相同的地址和端口(例如,带有多个预分叉监听器的Web服务器可以显著提高响应时间)来分担单个服务的负载时很有用。然而,由于任何服务都可以重新绑定,此选项需要考虑一定的安全因素。请注意,通过将此选项与ReuseAddressHint结合使用,您也将允许服务重新绑定现有的共享地址。在Unix上,这相当于SO_REUSEADDR套接字选项。在Windows上,这是默认行为,因此此选项被忽略。

QAbstractSocket.DontShareAddress

独家绑定地址和端口,因此不允许其他服务重新绑定。通过向bind() 方法传递此选项,您可以确保在成功的情况下,您的服务是唯一监听地址和端口的。不允许任何服务重新绑定,即使它们传递ReuseAddressHint。此选项比ShareAddress提供更高的安全性,但在某些操作系统上,它需要您以管理员权限运行服务器。在Unix和macOS上,不共享是绑定地址和端口的默认行为,因此此选项被忽略。在Windows上,此选项使用SO_EXCLUSIVEADDRUSE套接字选项。

QAbstractSocket.ReuseAddressHint

QAbstractSocket提供提示,即即使地址和端口已经被另一个套接字绑定,它也应尝试重新绑定服务。在Windows和Unix上,这相当于SO_REUSEADDR套接字选项。

QAbstractSocket.DefaultForPlatform

当前平台的默认选项。在Unix和macOS上,这相当于(DontShareAddress + ReuseAddressHint),在Windows上,它与ShareAddress相当。

class PauseMode#

(继承自enum.Flag) 此枚举描述了套接字在何时应该暂停数据传输的行为。当前支持的唯一通知是sslErrors()

常量

说明

QAbstractSocket.PauseNever

在套接字上不暂停数据传输。这是默认设置,与Qt 4的行为相符。

QAbstractSocket.PauseOnSslErrors

在接收到SSL错误通知后在套接字上暂停数据传输。即sslErrors()

__init__(socketType, parent)#
参数:

创建一个新的抽象套接字,类型为 socketType。将 parent 参数传递给 QObject 构造函数。

abort()#

终止当前连接并重置套接字。与 disconnectFromHost() 不同,此函数立即关闭套接字,丢弃写缓存中任何挂起的数据。

另请参阅

disconnectFromHost() close()

bind([port=0[, mode=QAbstractSocket.BindFlag.DefaultForPlatform]])#
参数:
  • 端口号 – int

  • 模式BindFlag 组合

返回类型:

bool

这是一个重载函数。

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

默认情况下,套接字使用 DefaultForPlatform BindMode 绑定。如果没有指定端口号,将选择随机端口号。

bind(address[, port=0[, mode=QAbstractSocket.BindFlag.DefaultForPlatform]])
参数:
返回类型:

bool

绑定到 address 上的端口号 port,使用 BindMode mode

对于 UDP 套接字,绑定后,每当指定的地址和端口上有 UDP 数据报到达时,都会发出信号 QUdpSocket::readyRead()。因此,此函数非常适合编写 UDP 服务器。

对于 TCP 套接字,此函数可以用来指定用于传出连接的接口,这在有多个网络接口的情况下非常有用。

默认情况下,套接字使用 DefaultForPlatform BindMode 绑定。如果没有指定端口号,将选择随机端口号。

成功时,函数返回 true,套接字进入 BoundState 状态;否则返回 false

connectToHost(address, port[, mode=QIODeviceBase.OpenModeFlag.ReadWrite])#
参数:

这是一个重载函数。

尝试在端口 port 上连接到地址 address

connectToHost(hostName, port[, mode=QIODeviceBase.OpenModeFlag.ReadWrite[, protocol=QAbstractSocket.NetworkLayerProtocol.AnyIPProtocol]])
参数:

尝试在指定的 port 上连接到 hostName。可以通过 protocol 参数指定要使用的网络协议(例如,IPv4 或 IPv6)。

套接字以指定的 openMode 打开,并首先进入 HostLookupState 状态,然后执行对 hostName 的主机名查找。如果查找成功,则发射 hostFound() 信号,并将其 QAbstractSocket 状态更改为 ConnectingState 。随后尝试连接到查找返回的地址或地址列表。如果成功建立连接,QAbstractSocket 状态更改为 ConnectedState 并发射 connected() 信号。

在任何时候,套接字都可以发射 errorOccurred() 信号来指示发生错误。

hostName 可以是字符串形式的 IP 地址(例如,"43.195.83.32"),或者是主机名(例如,"example.com")。只有当需要时,QAbstractSocket 才会进行查找。port 使用本地字节顺序。

connected()#

在调用 connectToHost() 并且成功建立连接之后,将发出此信号。

注意

在某些操作系统上,对于本地主机的连接,connectToHost() 调用可能会直接发出 connected 信号。

disconnectFromHost()#

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

另请参阅

connectToHost()

disconnected()#

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

警告

如果您需要删除连接到它的插槽中的发送者(sender),请使用 deleteLater() 函数。

error()#
返回类型:

SocketError

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

另请参阅

state() errorString()

errorOccurred(arg__1)#
参数:

arg__1SocketError

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

当这个信号发出时,套接字可能不会准备好重连。在这种情况下,应从事件循环中进行重连尝试。例如,使用一个带超时 0 的 QTimer::singleShot()。

SocketError 不是一个注册过的元类型,所以对于队列连接,您必须使用 Q_DECLARE_METATYPE() 和 qRegisterMetaType() 进行注册。

另请参阅

error() errorString()Creating Custom Qt Types

flush()#
返回类型:

bool

该函数尽可能从内部写入缓冲区写入到底层网络套接字,不进行阻塞。如果已写入数据,则返回 true;否则返回 false。

如果需要 QAbstractSocket 立即开始发送缓冲数据,请调用此函数。成功写入的字节数取决于操作系统。在大多数情况下,您不需要调用此函数,因为 QAbstractSocket 会在控制回到事件循环时自动开始发送数据。如果没有事件循环,则调用 waitForBytesWritten() 代替。

另请参阅

waitForBytesWritten()

hostFound()#

在调用 connectToHost() 后,在主机查找成功后发出该信号。

注意

从 Qt 4.6.3 版本开始,由于 DNS 结果可能会被缓存,QAbstractSocket 在调用 connectToHost() 方法时可能会直接触发 hostFound()

另请参阅

connected()

isValid()#
返回类型:

bool

如果套接字有效并且可以使用的,则返回 true;否则返回 false

注意

在读取和写入之前,套接字的状态必须是 ConnectedState

另请参阅

state()

localAddress()#
返回类型:

QHostAddress

如果可用,则返回本地套接字的宿主地址;否则返回 Null

这通常是主 IP 地址,但为本机连接,可以是 LocalHost(127.0.0.1)。

localPort()#
返回类型:

int

如果可用,则返回本地套接字的端口号(以原生字节顺序);否则返回 0。

pauseMode()#
返回类型:

PauseMode 的组合

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

另请参阅

setPauseMode() resume()

peerAddress()#
返回类型:

QHostAddress

当套接字处于ConnectedState(已连接状态)时,返回连接的对端地址;否则返回Null

peerName()#
返回类型:

str

返回由connectToHost()指定的对端名称,或者如果未调用connectToHost(),则返回空QString。

peerPort()#
返回类型:

int

如果套接字处于ConnectedState(已连接状态),返回连接对端的端口号;否则返回0。

protocolTag()#
返回类型:

str

返回此套接字的协议标签。如果设置了协议标签,那么在创建QNetworkProxyQuery时,将该协议标签传递给它,以指示要使用的协议标签。

proxy()#
返回类型:

QNetworkProxy

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

proxyAuthenticationRequired(proxy, authenticator)#
参数:

此信号可以在使用需要认证的代理时发出。然后可以使用必要的详细信息填充 authenticator 对象以允许认证并继续连接。

注意

无法使用队列连接连接到此信号,因为如果信号返回时未填充认证器的新信息,连接将失败。

readBufferSize()#
返回类型:

int

返回内部读取缓冲区的大小。这限制了在调用 read() 或 readAll() 之前客户端可以接收的数据量。

读取缓冲区大小为 0(默认值)表示缓冲区没有大小限制,确保没有数据丢失。

resume()#

在套接字上继续数据传输。此方法应在将套接字设置为在接收到通知时暂停并且在收到通知后使用。目前唯一支持的通知是sslErrors()。如果在套接字未暂停的情况下调用此方法,将产生未定义的行为。

setLocalAddress(address)#
参数:

地址QHostAddress

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

您可以在QAbstractSocket的子类中调用此函数,以更改在连接建立后localAddress()函数的返回值。此特性通常由代理连接用于虚拟连接设置。

请注意,此函数不会在连接之前(例如,bind())绑定套接字本地地址。

setLocalPort(port)#
参数:

端口号 – int

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

您可以在QAbstractSocket的子类中调用此函数,以更改在连接建立后localPort()函数的返回值。此特性通常由代理连接用于虚拟连接设置。

请注意,此函数不会在连接之前(例如,bind())绑定套接字本地端口。

setPauseMode(pauseMode)#
参数:

pauseModePauseMode 的组合

控制是否在接收到通知时暂停。参数 pauseMode 指定何时应该暂停套接字。目前支持的唯一通知是 sslErrors() 。如果设置为 PauseOnSslErrors ,则套接字上的数据传输将暂停,需要通过调用 resume() 显式重新启用。默认情况下,此选项设置为 PauseNever 。必须在连接到服务器之前调用此选项,否则可能导致未定义的行为。

另请参阅

pauseMode() resume()

setPeerAddress(address)#
参数:

地址QHostAddress

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

您可以在 QAbstractSocket 的子类中调用此函数,以便在建立连接后更改 peerAddress() 函数的返回值。此功能通常用于代理连接以设置虚拟连接。

setPeerName(name)#
参数:

name – str

设置远程对端的计算机名为 name

您可以在 QAbstractSocket 的子类中调用此函数,以便在连接建立后改变 peerName() 函数的返回值。此功能常用于虚拟连接设置的代理连接。

另请参阅

peerName()

setPeerPort(port)#
参数:

端口号 – int

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

您可以在连接建立后在 QAbstractSocket 的子类中调用此函数,以改变 peerPort() 函数的返回值。此功能常用于虚拟连接设置的代理连接。

setProtocolTag(tag)#
参数:

tag – str

为该套接字设置协议标记为 tag

另请参阅

protocolTag()

setProxy(networkProxy)#
参数:

networkProxyQNetworkProxy

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

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

要禁用此套接字使用代理,请使用 NoProxy 代理类型

socket.setProxy(QNetworkProxy.NoProxy)

代理的默认值是DefaultProxy,这意味着套接字将使用应用设置:如果使用setApplicationProxy设置了代理,则使用该代理;否则,如果使用setApplicationProxyFactory设置了工厂,则使用该工厂的类型为TcpSocket查询。

setReadBufferSize(size)#
参数:

size – int

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

如果缓冲区大小被限制在一定的范围内,QAbstractSocket不会缓存超过这个大小数据。例外情况下,缓冲区大小为0表示读取缓冲区是无限的,所有传入的数据都会被缓存。这是默认值。

如果只在特定时间点读取数据(例如,在实时流应用中)或想要防止接收过多数据导致应用最终耗尽内存,这个选项非常有用。

只有QTcpSocket使用QAbstractSocket的内部缓冲区;QUdpSocket根本不使用任何缓冲,而是依赖于操作系统的隐式缓冲。因此,在QUdpSocket上调用此函数没有效果。

另请参阅

readBufferSize() read()

setSocketDescriptor(socketDescriptor[, state=QAbstractSocket.SocketState.ConnectedState[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite]])#
参数:
返回类型:

bool

使用本地套接字描述符 socketDescriptor 初始化 QAbstractSocket。如果 socketDescriptor 被视为有效的套接字描述符,则返回 true;否则返回 false。套接字将打开为 openMode 中指定的模式,并进入由 socketState 指定的套接字状态。读取和写入缓冲区被清除,丢弃所有挂起的数据。

注意

无法使用相同的本地套接字描述符初始化两个抽象套接字。

另请参阅

socketDescriptor()

setSocketError(socketError)#
参数:

socketErrorSocketError

设置上次发生的错误的类型为 socketError

setSocketOption(option, value)#
参数:

将指定的 option 设置为 value 中描述的值。

注意

由于选项设置于内部套接字,因此只有在套接字被创建后,这些选项才有效。这只在调用 bind() 后或发射了 connected() 事件后,才能保证已发生。

另请参阅

socketOption()

setSocketState(state)#
参数:

stateSocketState

将套接字状态设置为 state

另请参阅

state()

socketDescriptor()#
返回类型:

qintptr

如果可用,返回 QAbstractSocket 对象的原生套接字描述符;否则返回 -1。

如果套接字使用 QNetworkProxy,则返回的描述符可能无法与原生套接字函数一起使用。

QAbstractSocket 处于 UnconnectedState 状态时,套接字描述符不可用。

另请参阅

setSocketDescriptor()

socketOption(option)#
参数:

optionSocketOption

返回类型:

object

返回 option 选项的值。

另请参阅

setSocketOption()

socketType()#
返回类型:

SocketType

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

另请参阅

QTcpSocket QUdpSocket

state()#
返回类型:

SocketState

返回套接字状态。

另请参阅

error()

stateChanged(arg__1)#
参数:

arg__1SocketState

每当 QAbstractSocket 的状态变化时,将发出此信号。参数 socketState 是新状态。

SocketState 不是一个已注册的元类型,所以在排队连接时,您必须使用 Q_DECLARE_METATYPE() 和 qRegisterMetaType() 进行注册。

另请参阅

state() 创建自定义 Qt 类型

waitForConnected([msecs=30000])#
参数:

msecs – int

返回类型:

bool

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

等待套接字连接,最多 msecs 毫秒。如果连接已建立,该函数返回 true;否则返回 false。在返回 false 的情况下,您可以调用 error() 确定错误原因。

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

socket.connectToHost("imap", 143)
if socket.waitForConnected(1000):
    qDebug("Connected!")

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

注意

此函数等待时间可能略长于 msecs,具体取决于主机查找所需的时间。

注意

对此函数的多次调用不会累积时间。如果超时,连接过程将被终止。

注意

在 Windows 上,此函数可能会随机失败。如果您的软件将在 Windows 上运行,请考虑使用事件循环和 connected() 信号。

waitForDisconnected([msecs=30000])#
参数:

msecs – int

返回类型:

bool

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

等待套接字断开连接,最多 msecs 毫秒。如果连接成功断开,此函数返回 true;否则返回 false(如果操作超时,如果发生错误,或者此 QAbstractSocket 已断开连接)。在返回 false 的情况下,您可以调用 error() 确定错误原因。

以下示例等待最多一秒钟以关闭连接

socket.disconnectFromHost()
if (socket.state() == QAbstractSocket.UnconnectedState
    or socket.waitForDisconnected(1000)) {
        qDebug("Disconnected!")

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

注意

在 Windows 上,此函数可能会随机失败。如果您的软件将在 Windows 上运行,请考虑使用事件循环和 disconnected() 信号。

另请参阅

disconnectFromHost() close()