PySide6.QtNetwork.QAbstractSocket¶
- 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()
def
setPeerAddress()
def
setPeerName()
def
setPeerPort()
def
setProtocolTag()
def
setProxy()
def
setSocketError()
def
setSocketState()
def
socketType()
def
state()
虚拟方法¶
def
bind()
def
connectToHost()
def
resume()
def
socketOption()
信号¶
def
connected()
def
disconnected()
def
errorOccurred()
def
hostFound()
def
stateChanged()
注意
本文档可能包含从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()
的那样。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线程中使用,以避免冻结用户界面。有关这两种方法的概述,请参见fortuneclient和blockingfortuneclient示例。
注意
我们不鼓励将阻塞函数与信号一起使用。应该使用两种可能性之一。
QAbstractSocket
可以与 QTextStream 和 QDataStream 的流操作符(operator<<() 和 operator>>())一起使用。但有一个需要注意的问题:在使用 operator>>() 读取数据之前,必须确保有足够的数据可用。- 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
指定的地址已被使用,并且设置为独占。
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以启用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 –
SocketType
parent –
QObject
创建一个类型为
socketType
的新抽象套接字。parent
参数传递给 QObject 的构造函数。- abort()¶
中止当前连接并重置套接字。与
disconnectFromHost()
不同,此函数会立即关闭套接字,丢弃写缓冲区中的任何待处理数据。另请参阅
disconnectFromHost()
close()
- bind([port=0[, mode=QAbstractSocket.BindFlag.DefaultForPlatform]])¶
- Parameters:
port – int
mode –
BindFlag
的组合
- Return type:
布尔
这是一个重载函数。
绑定到
QHostAddress
:Any 在端口port
上,使用BindMode
mode
。默认情况下,套接字使用
DefaultForPlatform
BindMode
进行绑定。如果未指定端口,则选择一个随机端口。- bind(address[, port=0[, mode=QAbstractSocket.BindFlag.DefaultForPlatform]])
- Parameters:
地址 –
QHostAddress
port – int
mode –
BindFlag
的组合
- Return type:
布尔
绑定到端口
port
上的address
,使用BindMode
的mode
。对于UDP套接字,绑定后,每当UDP数据报到达指定的地址和端口时,信号QUdpSocket::readyRead()就会发出。因此,这个函数对于编写UDP服务器非常有用。
对于TCP套接字,此函数可用于指定用于传出连接的接口,这在存在多个网络接口的情况下非常有用。
默认情况下,套接字使用
DefaultForPlatform
BindMode
进行绑定。如果未指定端口,则选择随机端口。成功时,函数返回
true
并且套接字进入BoundState
;否则返回false
。- connectToHost(address, port[, mode=QIODeviceBase.OpenModeFlag.ReadWrite])¶
- Parameters:
地址 –
QHostAddress
port – int
mode –
OpenModeFlag
的组合
这是一个重载函数。
尝试连接到端口
port
上的address
。- connectToHost(hostName, port[, mode=QIODeviceBase.OpenModeFlag.ReadWrite[, protocol=QAbstractSocket.NetworkLayerProtocol.AnyIPProtocol]])
- Parameters:
hostName – str
port – 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()
并成功建立连接后,会发出此信号。注意
在某些操作系统中,对于连接到本地主机的连接,
connectToHost()
调用可能会直接发出 connected() 信号。- disconnectFromHost()¶
尝试关闭套接字。如果有待写入的数据,
QAbstractSocket
将进入ClosingState
并等待所有数据写入完成。最终,它将进入UnconnectedState
并发出disconnected()
信号。另请参阅
- disconnected()¶
当套接字断开连接时,会发出此信号。
- error()¶
- Return type:
返回上次发生的错误类型。
另请参阅
- errorOccurred(socketError)¶
- Parameters:
socketError –
SocketError
此信号在发生错误后发出。
socketError
参数描述了发生的错误类型。当发出此信号时,套接字可能尚未准备好进行重新连接尝试。在这种情况下,应从事件循环中进行重新连接尝试。例如,使用QChronoTimer::singleShot()并将超时设置为0纳秒。
SocketError
不是一个已注册的元类型,因此对于队列连接,您需要使用 Q_DECLARE_METATYPE() 和 qRegisterMetaType() 进行注册。另请参阅
error()
errorString()创建 自定义 Qt 类型
- flush()¶
- Return type:
布尔
此函数尽可能多地从内部写入缓冲区写入底层网络套接字,而不会阻塞。如果写入了任何数据,此函数返回
true
;否则返回false。如果你需要
QAbstractSocket
立即开始发送缓冲的数据,请调用此函数。成功写入的字节数取决于操作系统。在大多数情况下,你不需要调用此函数,因为一旦控制返回到事件循环,QAbstractSocket
将自动开始发送数据。在没有事件循环的情况下,请调用waitForBytesWritten()
代替。另请参阅
waitForBytesWritten()
- hostFound()¶
在调用
connectToHost()
并且主机查找成功后,会发出此信号。- isValid()¶
- Return type:
布尔
如果套接字有效且可以使用,则返回
true
;否则返回false
。- localAddress()¶
- Return type:
如果可用,返回本地套接字的主机地址;否则返回
Null
。这通常是主机的主要IP地址,但也可以是
LocalHost
(127.0.0.1)用于连接到本地主机。- localPort()¶
- Return type:
整数
如果可用,返回本地套接字的主机端口号(以本机字节顺序);否则返回0。
返回此套接字的暂停模式。
另请参阅
- peerAddress()¶
- Return type:
如果套接字处于
ConnectedState
状态,则返回连接的对等方的地址;否则返回Null
。- peerName()¶
- Return type:
字符串
返回由
connectToHost()
指定的对等方的名称,如果connectToHost()
尚未被调用,则返回一个空的QString。- peerPort()¶
- Return type:
整数
如果套接字处于
ConnectedState
状态,则返回连接的对等方的端口;否则返回0。- protocolTag()¶
- Return type:
字符串
返回此套接字的协议标签。如果设置了协议标签,则在内部创建时将其传递给
QNetworkProxyQuery
,以指示要使用的协议标签。- proxy()¶
- Return type:
返回此套接字的网络代理。默认情况下,使用
DefaultProxy
,这意味着此套接字将查询应用程序的默认代理设置。- proxyAuthenticationRequired(proxy, authenticator)¶
- Parameters:
proxy –
QNetworkProxy
authenticator –
QAuthenticator
当使用需要身份验证的
proxy
时,可以发出此信号。然后可以使用所需的详细信息填充authenticator
对象,以允许身份验证并继续连接。- readBufferSize()¶
- Return type:
整数
返回内部读取缓冲区的大小。这限制了客户端在调用read()或readAll()之前可以接收的数据量。
读取缓冲区大小为0(默认值)意味着缓冲区没有大小限制,确保不会丢失任何数据。
- resume()¶
继续在套接字上进行数据传输。此方法仅应在套接字被设置为在收到通知时暂停并且已收到通知后使用。当前唯一支持的通知是
sslErrors()
。如果套接字未暂停,调用此方法将导致未定义的行为。- setLocalAddress(address)¶
- Parameters:
地址 –
QHostAddress
将连接的本地端地址设置为
address
。你可以在
QAbstractSocket
的子类中调用此函数,以在连接建立后更改localAddress()
函数的返回值。此功能通常由代理连接用于虚拟连接设置。请注意,此函数在连接之前不会绑定套接字的本地地址(例如,
bind()
)。- setLocalPort(port)¶
- Parameters:
端口 – int
设置连接本地端的端口为
port
。你可以在
QAbstractSocket
的子类中调用此函数,以在连接建立后更改localPort()
函数的返回值。此功能通常由代理连接用于虚拟连接设置。请注意,此函数在连接之前不会绑定套接字的本地端口(例如,
bind()
)。控制是否在收到通知时暂停。
pauseMode
参数指定了套接字应暂停的条件。目前唯一支持的通知是sslErrors()
。如果设置为PauseOnSslErrors
,套接字上的数据传输将暂停,并且需要通过调用resume()
显式重新启用。默认情况下,此选项设置为PauseNever
。此选项必须在连接到服务器之前调用,否则将导致未定义的行为。另请参阅
- setPeerAddress(address)¶
- Parameters:
地址 –
QHostAddress
将连接的远程端地址设置为
address
。你可以在
QAbstractSocket
的子类中调用此函数,以在连接建立后更改peerAddress()
函数的返回值。此功能通常由代理连接用于虚拟连接设置。- setPeerName(name)¶
- Parameters:
name – str
将远程对等方的主机名设置为
name
。你可以在
QAbstractSocket
的子类中调用此函数,以在连接建立后更改peerName()
函数的返回值。此功能通常由代理连接用于虚拟连接设置。另请参阅
- setPeerPort(port)¶
- Parameters:
端口 – int
将连接的远程端口设置为
port
。你可以在
QAbstractSocket
的子类中调用此函数,以在连接建立后更改peerPort()
函数的返回值。此功能通常由代理连接用于虚拟连接设置。- setProtocolTag(tag)¶
- Parameters:
标签 – str
设置此套接字的协议标签为
tag
。另请参阅
- setProxy(networkProxy)¶
- Parameters:
networkProxy –
QNetworkProxy
警告
本节包含从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
上调用此函数没有任何效果。另请参阅
- setSocketDescriptor(socketDescriptor[, state=QAbstractSocket.SocketState.ConnectedState[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite]])¶
- Parameters:
socketDescriptor –
qintptr
状态 –
SocketState
openMode –
OpenModeFlag
的组合
- Return type:
布尔
使用本地套接字描述符
socketDescriptor
初始化QAbstractSocket
。如果socketDescriptor
被接受为有效的套接字描述符,则返回true
;否则返回false
。套接字以openMode
指定的模式打开,并进入socketState
指定的套接字状态。读写缓冲区被清除,丢弃任何挂起的数据。- setSocketError(socketError)¶
- Parameters:
socketError –
SocketError
将最后发生的错误类型设置为
socketError
。- setSocketOption(option, value)¶
- Parameters:
option –
SocketOption
value – 对象
将给定的
option
设置为value
描述的值。- setSocketState(state)¶
- Parameters:
状态 –
SocketState
将套接字的状态设置为
state
。另请参阅
- socketDescriptor()¶
- Return type:
qintptr
如果可用,返回
QAbstractSocket
对象的本地套接字描述符;否则返回-1。如果套接字正在使用
QNetworkProxy
,返回的描述符可能无法与本地套接字函数一起使用。当
QAbstractSocket
处于UnconnectedState
时,套接字描述符不可用。- socketOption(option)¶
- Parameters:
选项 –
SocketOption
- Return type:
对象
返回
option
选项的值。另请参阅
- socketType()¶
- Return type:
返回套接字类型(TCP、UDP 或其他)。
另请参阅
- state()¶
- Return type:
返回套接字的状态。
另请参阅
- stateChanged(socketState)¶
- Parameters:
socketState –
SocketState
每当
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
稍长一些,具体取决于完成主机查找所需的时间。注意
多次调用此函数不会累积时间。如果函数超时,连接过程将被中止。
- 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()