PySide6.QtNetwork.QAbstractSocket

class QAbstractSocket

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

PySide6.QtNetwork.QAbstractSocket 的继承图

继承自: QUdpSocket, QTcpSocket, QSslSocket

概要

方法

虚拟方法

信号

注意

本文档可能包含从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()的那样。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应用程序中,阻塞套接字应仅在非GUI线程中使用,以避免冻结用户界面。有关这两种方法的概述,请参见fortuneclientblockingfortuneclient示例。

注意

我们不鼓励将阻塞函数与信号一起使用。应该使用两种可能性之一。

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

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

指定的地址已被使用,并且设置为独占。

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以启用IP_MULTICAST_LOOP(多播回环)套接字选项。

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

Flash

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)
Parameters:

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

abort()

中止当前连接并重置套接字。与disconnectFromHost()不同,此函数会立即关闭套接字,丢弃写缓冲区中的任何待处理数据。

另请参阅

disconnectFromHost() close()

bind([port=0[, mode=QAbstractSocket.BindFlag.DefaultForPlatform]])
Parameters:
  • port – int

  • modeBindFlag 的组合

Return type:

布尔

这是一个重载函数。

绑定到QHostAddress :Any 在端口 port 上,使用 BindMode mode

默认情况下,套接字使用 DefaultForPlatform BindMode 进行绑定。如果未指定端口,则选择一个随机端口。

bind(address[, port=0[, mode=QAbstractSocket.BindFlag.DefaultForPlatform]])
Parameters:
Return type:

布尔

绑定到端口 port 上的 address,使用 BindModemode

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

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

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

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

connectToHost(address, port[, mode=QIODeviceBase.OpenModeFlag.ReadWrite])
Parameters:

这是一个重载函数。

尝试连接到端口 port 上的 address

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

尝试在给定的port上连接到hostNameprotocol参数可用于指定要使用的网络协议(例如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()
Return type:

SocketError

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

另请参阅

state() errorString()

errorOccurred(socketError)
Parameters:

socketErrorSocketError

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

当发出此信号时,套接字可能尚未准备好进行重新连接尝试。在这种情况下,应从事件循环中进行重新连接尝试。例如,使用QChronoTimer::singleShot()并将超时设置为0纳秒。

SocketError 不是一个已注册的元类型,因此对于队列连接,您需要使用 Q_DECLARE_METATYPE() 和 qRegisterMetaType() 进行注册。

另请参阅

error() errorString()创建 自定义 Qt 类型

flush()
Return type:

布尔

此函数尽可能多地从内部写入缓冲区写入底层网络套接字,而不会阻塞。如果写入了任何数据,此函数返回true;否则返回false。

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

另请参阅

waitForBytesWritten()

hostFound()

在调用connectToHost()并且主机查找成功后,会发出此信号。

注意

自 Qt 4.6.3 起,QAbstractSocket 可能会直接从 connectToHost() 调用中发出 hostFound(),因为 DNS 结果可能已被缓存。

另请参阅

connected()

isValid()
Return type:

布尔

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

注意

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

另请参阅

state()

localAddress()
Return type:

QHostAddress

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

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

localPort()
Return type:

整数

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

pauseMode()
Return type:

PauseMode的组合

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

另请参阅

setPauseMode() resume()

peerAddress()
Return type:

QHostAddress

如果套接字处于ConnectedState状态,则返回连接的对等方的地址;否则返回Null

peerName()
Return type:

字符串

返回由connectToHost()指定的对等方的名称,如果connectToHost()尚未被调用,则返回一个空的QString。

peerPort()
Return type:

整数

如果套接字处于ConnectedState状态,则返回连接的对等方的端口;否则返回0。

protocolTag()
Return type:

字符串

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

proxy()
Return type:

QNetworkProxy

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

proxyAuthenticationRequired(proxy, authenticator)
Parameters:

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

注意

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

readBufferSize()
Return type:

整数

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

读取缓冲区大小为0(默认值)意味着缓冲区没有大小限制,确保不会丢失任何数据。

resume()

继续在套接字上进行数据传输。此方法仅应在套接字被设置为在收到通知时暂停并且已收到通知后使用。当前唯一支持的通知是sslErrors()。如果套接字未暂停,调用此方法将导致未定义的行为。

setLocalAddress(address)
Parameters:

地址QHostAddress

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

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

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

setLocalPort(port)
Parameters:

端口 – int

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

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

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

setPauseMode(pauseMode)
Parameters:

pauseModePauseMode 的组合

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

另请参阅

pauseMode() resume()

setPeerAddress(address)
Parameters:

地址QHostAddress

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

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

setPeerName(name)
Parameters:

name – str

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

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

另请参阅

peerName()

setPeerPort(port)
Parameters:

端口 – int

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

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

setProtocolTag(tag)
Parameters:

标签 – str

设置此套接字的协议标签为 tag

另请参阅

protocolTag()

setProxy(networkProxy)
Parameters:

networkProxyQNetworkProxy

警告

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

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

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

socket.setProxy(QNetworkProxy.NoProxy)

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

setReadBufferSize(size)
Parameters:

size – int

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

如果缓冲区大小限制为某个特定大小,QAbstractSocket 将不会缓冲超过这个大小的数据。例外情况是,缓冲区大小为0意味着读取缓冲区是无限的,所有传入的数据都会被缓冲。这是默认设置。

如果您只在特定时间点读取数据(例如,在实时流应用程序中),或者如果您想保护您的套接字免受接收过多数据的影响,这可能会导致您的应用程序内存不足,此选项非常有用。

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

另请参阅

readBufferSize() read()

setSocketDescriptor(socketDescriptor[, state=QAbstractSocket.SocketState.ConnectedState[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite]])
Parameters:
Return type:

布尔

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

注意

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

另请参阅

socketDescriptor()

setSocketError(socketError)
Parameters:

socketErrorSocketError

将最后发生的错误类型设置为socketError

setSocketOption(option, value)
Parameters:

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

注意

由于选项是在内部套接字上设置的,因此只有在套接字已创建时,这些选项才会生效。这只有在调用 bind() 之后,或者当 connected() 被触发时,才能保证套接字已创建。

另请参阅

socketOption()

setSocketState(state)
Parameters:

状态SocketState

将套接字的状态设置为 state

另请参阅

state()

socketDescriptor()
Return type:

qintptr

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

如果套接字正在使用 QNetworkProxy,返回的描述符可能无法与本地套接字函数一起使用。

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

另请参阅

setSocketDescriptor()

socketOption(option)
Parameters:

选项SocketOption

Return type:

对象

返回option选项的值。

另请参阅

setSocketOption()

socketType()
Return type:

SocketType

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

另请参阅

QTcpSocket QUdpSocket

state()
Return type:

SocketState

返回套接字的状态。

另请参阅

error()

stateChanged(socketState)
Parameters:

socketStateSocketState

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

SocketState 不是一个已注册的元类型,因此对于排队的连接,您需要使用 Q_DECLARE_METATYPE() 和 qRegisterMetaType() 进行注册。

另请参阅

state() 创建 自定义 Qt 类型

waitForConnected([msecs=30000])
Parameters:

msecs – 整数

Return type:

布尔

警告

本节包含从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])
Parameters:

msecs – 整数

Return type:

布尔

警告

本节包含从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()