- class QAbstractSocket#
QAbstractSocket类提供了所有套接字类型共有的基本功能。 更多…继承自:
QUdpSocket,QTcpSocket,QSslSocket概述#
方法#
def
__init__()def
abort()def
bind()def
connectToHost()def
error()def
flush()def
isValid()def
localAddress()def
localPort()def
pauseMode()def
peerAddress()def
peerName()def
peerPort()def
protocolTag()def
proxy()def
readBufferSize()def
setLocalPort()def
setPauseMode()定义
setProxy()定义
socketType()定义
state()
虚函数#
def
bind()def
connectToHost()定义
resume()
信号#
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译存在问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来通知我们
详细描述#
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
QAbstractSocket是QTcpSocket和QUdpSocket的基类,并包含这两个类所有的公共功能。如果您需要套接字,您有两个选项实例化
QTcpSocket或QUdpSocket.创建本地套接字描述符,实例化
QAbstractSocket,并调用setSocketDescriptor()来包装本地套接字。
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将发出errorOccurred(RemoteHostClosedError),在此期间套接字状态仍然为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线程中使用,以避免冻结用户界面。请参阅 fortuneclient 和 blockingfortuneclient 示例,了解两种方法的概述。
注意
我们不建议将阻塞函数与信号一起使用。应使用其中一种可能性。
QAbstractSocket可以与 QTextStream 和 QDataStream 的流运算符(运算符<<() 和 >>())一起使用。不过需要注意一个问题:在尝试使用运算符>>()读取数据之前,必须确保有足够的数据可用。另请参阅
- class SocketType#
此枚举描述了传输层协议。
常量
说明
QAbstractSocket.TcpSocket
TCP
QAbstractSocket.UdpSocket
UDP
QAbstractSocket.SctpSocket
SCTP
QAbstractSocket.UnknownSocketType
除TCP、UDP和SCTP之外的其他类型
另请参阅
- class NetworkLayerProtocol#
此枚举描述了Qt中使用的网络层协议值。
常量
说明
QAbstractSocket.IPv4Protocol
IPv4
QAbstractSocket.IPv6Protocol
IPv6
QAbstractSocket.AnyIPProtocol
IPv4或IPv6中的任一协议
QAbstractSocket(UnknownNetworkLayerProtocol)
除IPv4和IPv6之外的其他协议
另请参阅
- 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
发生了未识别的错误。
另请参阅
- class SocketState#
此枚举描述了套接字可以处的不同状态。
常量
说明
QAbstractSocket.UnconnectedState
套接字未连接。
QAbstractSocket.HostLookupState
套接字正在执行主机名查找。
QAbstractSocket.ConnectingState
套接字已开始建立连接。
QAbstractSocket.ConnectedState
建立了连接。
QAbstractSocket.BoundState
套接字绑定到了一个地址和端口。
QAbstractSocket.ClosingState
套接字即将关闭(可能还有数据等待写入)。
QAbstractSocket.ListeningState
仅用于内部使用。
另请参阅
- 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 –
SocketTypeparent –
QObject
创建一个新的抽象套接字,类型为
socketType。将parent参数传递给 QObject 构造函数。- abort()#
终止当前连接并重置套接字。与
disconnectFromHost()不同,此函数立即关闭套接字,丢弃写缓存中任何挂起的数据。另请参阅
disconnectFromHost()close()- bind([port=0[, mode=QAbstractSocket.BindFlag.DefaultForPlatform]])#
- 参数:
端口号 – int
模式 –
BindFlag组合
- 返回类型:
bool
这是一个重载函数。
绑定到
QHostAddress: 任何端口号port,使用BindModemode。默认情况下,套接字使用
DefaultForPlatformBindMode绑定。如果没有指定端口号,将选择随机端口号。- bind(address[, port=0[, mode=QAbstractSocket.BindFlag.DefaultForPlatform]])
- 参数:
地址 –
QHostAddress端口号 – int
模式 –
BindFlag组合
- 返回类型:
bool
绑定到
address上的端口号port,使用BindModemode。对于 UDP 套接字,绑定后,每当指定的地址和端口上有 UDP 数据报到达时,都会发出信号 QUdpSocket::readyRead()。因此,此函数非常适合编写 UDP 服务器。
对于 TCP 套接字,此函数可以用来指定用于传出连接的接口,这在有多个网络接口的情况下非常有用。
默认情况下,套接字使用
DefaultForPlatformBindMode绑定。如果没有指定端口号,将选择随机端口号。成功时,函数返回
true,套接字进入BoundState状态;否则返回false。- connectToHost(address, port[, mode=QIODeviceBase.OpenModeFlag.ReadWrite])#
- 参数:
地址 –
QHostAddress端口号 – int
mode –
OpenModeFlag的组合
这是一个重载函数。
尝试在端口
port上连接到地址address。- connectToHost(hostName, port[, mode=QIODeviceBase.OpenModeFlag.ReadWrite[, protocol=QAbstractSocket.NetworkLayerProtocol.AnyIPProtocol]])
- 参数:
hostName – 字符串
端口号 – int
mode –
OpenModeFlag的组合protocol –
NetworkLayerProtocol
尝试在指定的
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()并且成功建立连接之后,将发出此信号。- disconnectFromHost()#
尝试关闭套接字。如果存在等待写入的数据,
QAbstractSocket将进入ClosingState状态并等待所有数据写入。最终,它将进入UnconnectedState状态并发出disconnected()信号。另请参阅
- disconnected()#
当套接字断开连接时发出此信号。
警告
如果您需要删除连接到它的插槽中的发送者(sender),请使用 deleteLater() 函数。
- error()#
- 返回类型:
返回上次发生的错误类型。
另请参阅
- errorOccurred(arg__1)#
- 参数:
arg__1 –
SocketError
这个信号在发生错误后发出。参数
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()后,在主机查找成功后发出该信号。- isValid()#
- 返回类型:
bool
如果套接字有效并且可以使用的,则返回
true;否则返回false。- localAddress()#
- 返回类型:
如果可用,则返回本地套接字的宿主地址;否则返回
Null。这通常是主 IP 地址,但为本机连接,可以是
LocalHost(127.0.0.1)。- localPort()#
- 返回类型:
int
如果可用,则返回本地套接字的端口号(以原生字节顺序);否则返回 0。
返回此套接字的暂停模式。
另请参阅
- peerAddress()#
- 返回类型:
当套接字处于
ConnectedState(已连接状态)时,返回连接的对端地址;否则返回Null。- peerName()#
- 返回类型:
str
返回由
connectToHost()指定的对端名称,或者如果未调用connectToHost(),则返回空QString。- peerPort()#
- 返回类型:
int
如果套接字处于
ConnectedState(已连接状态),返回连接对端的端口号;否则返回0。- protocolTag()#
- 返回类型:
str
返回此套接字的协议标签。如果设置了协议标签,那么在创建
QNetworkProxyQuery时,将该协议标签传递给它,以指示要使用的协议标签。- proxy()#
- 返回类型:
返回此套接字的网络代理。默认情况下使用
DefaultProxy,这意味着此套接字将查询应用程序的默认代理设置。- proxyAuthenticationRequired(proxy, authenticator)#
- 参数:
proxy –
QNetworkProxyauthenticator –
QAuthenticator
此信号可以在使用需要认证的代理时发出。然后可以使用必要的详细信息填充
authenticator对象以允许认证并继续连接。- readBufferSize()#
- 返回类型:
int
返回内部读取缓冲区的大小。这限制了在调用 read() 或 readAll() 之前客户端可以接收的数据量。
读取缓冲区大小为 0(默认值)表示缓冲区没有大小限制,确保没有数据丢失。
- resume()#
在套接字上继续数据传输。此方法应在将套接字设置为在接收到通知时暂停并且在收到通知后使用。目前唯一支持的通知是
sslErrors()。如果在套接字未暂停的情况下调用此方法,将产生未定义的行为。- setLocalAddress(address)#
- 参数:
地址 –
QHostAddress
将连接的本地端地址设置为
address。您可以在
QAbstractSocket的子类中调用此函数,以更改在连接建立后localAddress()函数的返回值。此特性通常由代理连接用于虚拟连接设置。请注意,此函数不会在连接之前(例如,
bind())绑定套接字本地地址。- setLocalPort(port)#
- 参数:
端口号 – int
将连接的本地端端口设置为
port。您可以在
QAbstractSocket的子类中调用此函数,以更改在连接建立后localPort()函数的返回值。此特性通常由代理连接用于虚拟连接设置。请注意,此函数不会在连接之前(例如,
bind())绑定套接字本地端口。控制是否在接收到通知时暂停。参数
pauseMode指定何时应该暂停套接字。目前支持的唯一通知是sslErrors()。如果设置为PauseOnSslErrors,则套接字上的数据传输将暂停,需要通过调用resume()显式重新启用。默认情况下,此选项设置为PauseNever。必须在连接到服务器之前调用此选项,否则可能导致未定义的行为。另请参阅
- setPeerAddress(address)#
- 参数:
地址 –
QHostAddress
将连接的远程端地址设置为
address。您可以在
QAbstractSocket的子类中调用此函数,以便在建立连接后更改peerAddress()函数的返回值。此功能通常用于代理连接以设置虚拟连接。- setPeerName(name)#
- 参数:
name – str
设置远程对端的计算机名为
name。您可以在
QAbstractSocket的子类中调用此函数,以便在连接建立后改变peerName()函数的返回值。此功能常用于虚拟连接设置的代理连接。另请参阅
- setPeerPort(port)#
- 参数:
端口号 – int
将连接的远程端口设置为
port。您可以在连接建立后在
QAbstractSocket的子类中调用此函数,以改变peerPort()函数的返回值。此功能常用于虚拟连接设置的代理连接。- setProtocolTag(tag)#
- 参数:
tag – str
为该套接字设置协议标记为
tag。另请参阅
- setProxy(networkProxy)#
- 参数:
networkProxy –
QNetworkProxy
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
将此套接字的显式网络代理设置为
networkProxy。要禁用此套接字使用代理,请使用
NoProxy代理类型socket.setProxy(QNetworkProxy.NoProxy)
代理的默认值是
DefaultProxy,这意味着套接字将使用应用设置:如果使用setApplicationProxy设置了代理,则使用该代理;否则,如果使用setApplicationProxyFactory设置了工厂,则使用该工厂的类型为TcpSocket查询。- setReadBufferSize(size)#
- 参数:
size – int
设置QAbstractSocket内部读取缓冲区的大小为
size字节。如果缓冲区大小被限制在一定的范围内,QAbstractSocket不会缓存超过这个大小数据。例外情况下,缓冲区大小为0表示读取缓冲区是无限的,所有传入的数据都会被缓存。这是默认值。
如果只在特定时间点读取数据(例如,在实时流应用中)或想要防止接收过多数据导致应用最终耗尽内存,这个选项非常有用。
只有QTcpSocket使用QAbstractSocket的内部缓冲区;QUdpSocket根本不使用任何缓冲,而是依赖于操作系统的隐式缓冲。因此,在QUdpSocket上调用此函数没有效果。
另请参阅
- setSocketDescriptor(socketDescriptor[, state=QAbstractSocket.SocketState.ConnectedState[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite]])#
- 参数:
socketDescriptor –
qintptrstate –
SocketStateopenMode – 组合
OpenModeFlag
- 返回类型:
bool
使用本地套接字描述符
socketDescriptor初始化QAbstractSocket。如果socketDescriptor被视为有效的套接字描述符,则返回true;否则返回false。套接字将打开为openMode中指定的模式,并进入由socketState指定的套接字状态。读取和写入缓冲区被清除,丢弃所有挂起的数据。- setSocketError(socketError)#
- 参数:
socketError –
SocketError
设置上次发生的错误的类型为
socketError。- setSocketOption(option, value)#
- 参数:
option –
SocketOptionvalue – 对象
将指定的
option设置为value中描述的值。- setSocketState(state)#
- 参数:
state –
SocketState
将套接字状态设置为
state。另请参阅
- socketDescriptor()#
- 返回类型:
qintptr
如果可用,返回
QAbstractSocket对象的原生套接字描述符;否则返回 -1。如果套接字使用
QNetworkProxy,则返回的描述符可能无法与原生套接字函数一起使用。当
QAbstractSocket处于UnconnectedState状态时,套接字描述符不可用。- socketOption(option)#
- 参数:
option –
SocketOption- 返回类型:
object
返回
option选项的值。另请参阅
- socketType()#
- 返回类型:
返回套接字类型(TCP、UDP 或其他)。
另请参阅
- state()#
- 返回类型:
返回套接字状态。
另请参阅
- stateChanged(arg__1)#
- 参数:
arg__1 –
SocketState
每当
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()