The QAbstractSocket 类提供所有套接字类型共有的基功能。 更多...
头: | #include <QAbstractSocket> |
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, ..., UnknownSocketError } |
enum | SocketOption { LowDelayOption, KeepAliveOption, MulticastTtlOption, MulticastLoopbackOption, ..., ReceiveBufferSizeSocketOption } |
enum | SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, ..., ListeningState } |
enum | SocketType { TcpSocket, UdpSocket, SctpSocket, UnknownSocketType } |
QAbstractSocket (SocketType socketType , QObject * parent ) | |
virtual | ~QAbstractSocket () |
void | abort () |
bool | bind (const QHostAddress & address , quint16 port = 0, BindMode mode = DefaultForPlatform) |
bool | bind (quint16 port = 0, BindMode mode = DefaultForPlatform) |
virtual void | connectToHost (const QString & hostName , quint16 port , OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol) |
virtual void | connectToHost (const QHostAddress & address , quint16 port , OpenMode openMode = ReadWrite) |
virtual void | disconnectFromHost () |
SocketError | error () const |
bool | flush () |
bool | isValid () const |
QHostAddress | localAddress () const |
quint16 | localPort () const |
PauseModes | pauseMode () const |
QHostAddress | peerAddress () const |
QString | peerName () const |
quint16 | peerPort () const |
QNetworkProxy | proxy () const |
qint64 | readBufferSize () const |
virtual void | resume () |
void | setPauseMode (PauseModes pauseMode ) |
void | setProxy (const QNetworkProxy & networkProxy ) |
virtual void | setReadBufferSize (qint64 size ) |
virtual bool | setSocketDescriptor (qintptr socketDescriptor , SocketState socketState = ConnectedState, OpenMode openMode = ReadWrite) |
virtual void | setSocketOption (QAbstractSocket::SocketOption option , const QVariant & value ) |
virtual qintptr | socketDescriptor () const |
virtual QVariant | socketOption (QAbstractSocket::SocketOption option ) |
SocketType | socketType () const |
SocketState | state () const |
virtual bool | waitForConnected (int msecs = 30000) |
virtual bool | waitForDisconnected (int msecs = 30000) |
virtual bool | atEnd () const |
virtual qint64 | bytesAvailable () const |
virtual qint64 | bytesToWrite () const |
virtual bool | canReadLine () const |
virtual void | close () |
virtual bool | isSequential () const |
virtual bool | waitForBytesWritten (int msecs = 30000) |
virtual bool | waitForReadyRead (int msecs = 30000) |
void | connected () |
void | disconnected () |
void | error (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 (SocketError socketError ) |
void | setSocketState (SocketState state ) |
virtual qint64 | readData (char * data , qint64 maxSize ) |
virtual qint64 | readLineData (char * data , qint64 maxlen ) |
virtual qint64 | writeData (const char * data , qint64 size ) |
The QAbstractSocket 类提供所有套接字类型共有的基功能。
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
()。若在任何阶段出现错误,
error
() 被发射。每当状态改变时,
stateChanged
() 被发射。为方便起见,
isValid
() 返回
true
若套接字读/写就绪,但请注意,套接字状态必须为
ConnectedState
在读写可以发生之前。
读取或写入数据是通过调用 read () 或 write (),或使用方便函数 readLine () 和 readAll (). QAbstractSocket 还继承 getChar (), putChar (),和 ungetChar () 从 QIODevice ,操控单个字节。 bytesWritten () 信号被发射当已将数据写入套接字时。注意 Qt 不限制写入缓冲大小。可以监视其大小,通过监听此信号。
The readyRead () 信号被发射每当有新数据组块到达时。 bytesAvailable () 然后返回可供读取的字节数。通常,会连接 readyRead () 信号到槽并在那里读取所有可用数据。若一次不读取所有数据,剩余数据稍后将仍可用,且任何新传入数据会被追加到 QAbstractSocket 的内部读取缓冲。要限制读取缓冲的大小,调用 setReadBufferSize ().
要关闭套接字,调用 disconnectFromHost (). QAbstractSocket 进入 QAbstractSocket::ClosingState 。在将所有待决数据写入套接字后, QAbstractSocket 实际关闭套接字,进入 QAbstractSocket::UnconnectedState ,和发射 disconnected ()。若想要立即中止连接,丢弃所有待决数据,调用 abort () 取而代之。若远程主机关闭连接, QAbstractSocket 将发射 error( QAbstractSocket::RemoteHostClosedError ),在此期间,套接字状态将仍然是 ConnectedState ,然后 disconnected () 信号会被发射。
连接对等方端口和地址的抓取是通过调用 peerPort () 和 peerAddress (). peerName () 返回对等方主机名,如传递给 connectToHost (). localPort () 和 localAddress () 返回本地套接字的端口和地址。
QAbstractSocket 提供挂起调用线程的一组函数,直到发射某些信号。这些函数可以用于实现阻塞套接字:
举例说明:
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 可以使用 QTextStream and QDataStream 的流运算符 (operator<<() 和 operator>>())。尽管有一个问题要注意:必须确保有足够数据可用,先于尝试读取它使用 operator>>().
另请参阅 QNetworkAccessManager and QTcpServer .
此枚举描述的不同标志可以传递给行为修改 QAbstractSocket::bind ().
常量 | 值 | 描述 |
---|---|---|
QAbstractSocket::ShareAddress
|
0x1
|
允许将其它服务绑定到相同地址和端口。这很有用,当多个进程通过监听相同地址和端口共享单个服务的负载时 (如:带有几个预分叉监听器的 web 服务器可以大大改进响应时间)。不管怎样,因为允许重新绑定任何服务,所以此选项服从某些安全性注意事项。注意,通过组合此选项与 ReuseAddressHint,还允许服务重新绑定现有共享地址。在 Unix,这相当于 SO_REUSEADDR 套接字选项。在 Windows,此选项被忽略。 |
QAbstractSocket::DontShareAddress
|
0x2
|
独占绑定地址和端口,所以不允许重新绑定其它服务。通过将此选项传递给 QAbstractSocket::bind (),保证成功时,唯一在监听地址和端口的是您的服务。不允许重新绑定服务,即使它们传递 ReuseAddressHint。此选项相比 ShareAddress 提供了更多安全性,但在某些操作系统,它要求以管理员权限运行服务器。在 Unix 和 macOS,不共享是绑定地址和端口的默认行为,因此此选项被忽略。在 Windows,此选项使用 SO_EXCLUSIVEADDRUSE 套接字选项。 |
QAbstractSocket::ReuseAddressHint
|
0x4
|
提供提示为 QAbstractSocket 应该试着重新绑定服务,即使地址和端口已被另一套接字绑定。在 Windows 和 Unix,这相当于 SO_REUSEADDR 套接字选项。 |
QAbstractSocket::DefaultForPlatform
|
0x0
|
用于当前平台的默认选项。在 Unix 和 macOS,这相当于 (DontShareAddress + ReuseAddressHint),和在 Windows,它相当于 ShareAddress。 |
该枚举在 Qt 5.0 引入或被修改。
BindMode 类型是 typedef 对于 QFlags <BindFlag>。它存储 BindFlag 值的 OR 组合。
此枚举描述用于 Qt 的网络层协议值。
常量 | 值 | 描述 |
---|---|---|
QAbstractSocket::IPv4Protocol
|
0
|
IPv4 |
QAbstractSocket::IPv6Protocol
|
1
|
IPv6 |
QAbstractSocket::AnyIPProtocol
|
2
|
IPv4 或 IPv6 |
QAbstractSocket::UnknownNetworkLayerProtocol
|
-1
|
除了 IPv4 和 IPv6 |
另请参阅 QHostAddress::protocol ().
此枚举描述套接字应继续持有数据传输的行为。目前支持的唯一通知是 QSslSocket::sslErrors ().
常量 | 值 | 描述 |
---|---|---|
QAbstractSocket::PauseNever
|
0x0
|
不暂停套接字数据传输。这是默认行为且匹配 Qt 4 的行为。 |
QAbstractSocket::PauseOnSslErrors
|
0x1
|
暂停套接字数据传输,当收到 SSL 错误通知时。即 QSslSocket::sslErrors (). |
该枚举在 Qt 5.0 引入或被修改。
PauseModes 类型是 typedef 对于 QFlags <PauseMode>。它存储 PauseMode 值的 OR 组合。
此枚举描述可以发生的套接字错误。
常量 | 值 | 描述 |
---|---|---|
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 ().
此枚举表示套接字可以设置的选项。若期望,可以设置它们后于收到 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 引入。 |
可能的值对于 TypeOfServiceOption 是:
值 | 描述 |
---|---|
224 | 网络控制 |
192 | 网间控制 |
160 | CRITIC/ECP |
128 | 刷新覆写 |
96 | 刷新 |
64 | 立即 |
32 | 优先级 |
0 | 例程 |
该枚举在 Qt 4.6 引入或被修改。
另请参阅 QAbstractSocket::setSocketOption () 和 QAbstractSocket::socketOption ().
此枚举描述套接字可以处于的不同状态。
常量 | 值 | 描述 |
---|---|---|
QAbstractSocket::UnconnectedState
|
0
|
套接字未连接。 |
QAbstractSocket::HostLookupState
|
1
|
套接字正在履行主机名查找。 |
QAbstractSocket::ConnectingState
|
2
|
套接字开始建立连接。 |
QAbstractSocket::ConnectedState
|
3
|
已建立连接。 |
QAbstractSocket::BoundState
|
4
|
套接字被绑定到地址和端口。 |
QAbstractSocket::ClosingState
|
6
|
套接字即将关闭 (数据可能仍在等待被写入)。 |
QAbstractSocket::ListeningState
|
5
|
仅供内部使用。 |
另请参阅 QAbstractSocket::state ().
此枚举描述传输层协议。
常量 | 值 | 描述 |
---|---|---|
QAbstractSocket::TcpSocket
|
0
|
TCP |
QAbstractSocket::UdpSocket
|
1
|
UDP |
QAbstractSocket::SctpSocket
|
2
|
SCTP |
QAbstractSocket::UnknownSocketType
|
-1
|
除了 TCP、UDP 及 SCTP |
另请参阅 QAbstractSocket::socketType ().
创建新的抽象套接字为类型 socketType 。 parent 自变量会被传递给 QObject 的构造函数。
另请参阅 socketType (), QTcpSocket ,和 QUdpSocket .
[虚拟]
QAbstractSocket::
~QAbstractSocket
()
销毁套接字。
中止当前连接并重置套接字。不像 disconnectFromHost (),此函数立即关闭套接字,丢弃写缓冲中任何待决数据。
另请参阅 disconnectFromHost () 和 close ().
[虚拟]
bool
QAbstractSocket::
atEnd
() const
重实现自 QIODevice::atEnd ().
返回
true
若目前没有更多数据可供读取;否则返回
false
.
此函数最常用于以循环方式从套接字读取数据。例如:
// This slot is connected to QAbstractSocket::readyRead() void SocketClass::readyReadSlot() { while (!socket.atEnd()) { QByteArray data = socket.read(100); .... } }
另请参阅 bytesAvailable () 和 readyRead ().
绑定到 address 在端口 port ,使用 BindMode mode .
将此套接字绑定到地址 address 和端口 port .
对于 UDP 套接字,绑定后信号 QUdpSocket::readyRead () 被发射每当 UDP 数据报到达指定地址和端口时。因此,此函数对编写 UDP 服务器很有用。
对于 TCP 套接字,此函数可以用于指定对外连接要使用哪个接口,在多网络接口情况下很有用。
默认情况下,绑定套接字使用 DefaultForPlatform BindMode 。若端口未指定,选择随机端口。
当成功时,函数返回
true
和套接字进入
BoundState
;否则它返回
false
.
该函数在 Qt 5.0 引入。
这是重载函数。
绑定到 QHostAddress :任何在端口 port ,使用 BindMode mode .
默认情况下,绑定套接字使用 DefaultForPlatform BindMode 。若端口未指定,选择随机端口。
该函数在 Qt 5.0 引入。
[虚拟]
qint64
QAbstractSocket::
bytesAvailable
() const
重实现自 QIODevice::bytesAvailable ().
返回等待读取的传入字节数。
另请参阅 bytesToWrite () 和 read ().
[虚拟]
qint64
QAbstractSocket::
bytesToWrite
() const
重实现自 QIODevice::bytesToWrite ().
返回等待写入的字节数。写入字节当控制回到事件循环或当 flush () 被调用。
另请参阅 bytesAvailable () 和 flush ().
[虚拟]
bool
QAbstractSocket::
canReadLine
() const
重实现自 QIODevice::canReadLine ().
返回
true
若可以从套接字读取一行数据;否则返回
false
.
另请参阅 readLine ().
[虚拟]
void
QAbstractSocket::
close
()
重实现自 QIODevice::close ().
关闭 I/O 设备为套接字和调用 disconnectFromHost () 以关闭套接字连接。
见 QIODevice::close () 了解当关闭 I/O 设备时出现动作的描述。
另请参阅 abort ().
[虚拟]
void
QAbstractSocket::
connectToHost
(const
QString
&
hostName
,
quint16
port
,
OpenMode
openMode
= ReadWrite,
NetworkLayerProtocol
protocol
= AnyIPProtocol)
试图连接到 hostName 在给定 port 。 protocol 参数可以用于指定要使用哪种网络协议 (如 IPv4 或 IPv6)。
套接字被打开采用给定 openMode 并首先进入 HostLookupState ,然后履行查找主机名 hostName 。若查找成功, hostFound () 被发射和 QAbstractSocket 进入 ConnectingState 。然后,试图连接到地址 (或由查找返回的地址)。最后,若建立连接, QAbstractSocket 进入 ConnectedState 并发射 connected ().
在任何时候,套接字可以发射 error () 给 (发出错误的) 信号。
hostName 可以是字符串形式的 IP 地址 (如 43.195.83.32),或者它可以是主机名 (如 example.com)。 QAbstractSocket 将仅在要求时才查找。 port 是本机字节序。
另请参阅 state (), peerName (), peerAddress (), peerPort (),和 waitForConnected ().
[虚拟]
void
QAbstractSocket::
connectToHost
(const
QHostAddress
&
address
,
quint16
port
,
OpenMode
openMode
= ReadWrite)
这是重载函数。
试图连接到 address 在端口 port .
[signal]
void
QAbstractSocket::
connected
()
此信号被发射在 connectToHost () 有被调用且连接已成功建立。
注意: 在某些操作系统,可以直接发射 connected() 信号从 connectToHost () 调用对于连接到本地主机。
另请参阅 connectToHost () 和 disconnected ().
[虚拟]
void
QAbstractSocket::
disconnectFromHost
()
试图关闭套接字。若有等待写入的待决数据, QAbstractSocket 将进入 ClosingState 并等待直到所有数据被写入。最终,它将进入 UnconnectedState 和发射 disconnected () 信号。
另请参阅 connectToHost ().
[signal]
void
QAbstractSocket::
disconnected
()
此信号被发射当套接字断开连接时。
警告: 若需要删除 sender () 为此信号在连接到它的槽中,使用 deleteLater() 函数。
另请参阅 connectToHost (), disconnectFromHost (),和 abort ().
返回最后发生的错误类型。
另请参阅 state () 和 errorString ().
[signal]
void
QAbstractSocket::
error
(
QAbstractSocket::SocketError
socketError
)
此信号发射,在发生错误后。 socketError 参数描述发生错误的类型。
当发射此信号时,套接字试图重新连接可能还未就绪。在此情况下,试图重新连接应该是从事件循环。例如,使用 QTimer::singleShot () 采用 0 作为超时。
QAbstractSocket::SocketError 不是注册 Metatype (元类型),因此,对于队列化连接而言,必须注册它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().
注意: 信号 error 在此类中是重载。要使用函数指针句法连接到此信号,必须在静态铸造中指定信号类型,如此范例所示:
connect(abstractSocket, static_cast<void(QAbstractSocket::*)(QAbstractSocket::SocketError)>(&QAbstractSocket::error), [=](QAbstractSocket::SocketError socketError){ /* ... */ });
另请参阅 error (), errorString (),和 创建自定义 Qt 类型 .
此函数不阻塞且尽可能多地,把内部缓冲写入到底层网络套接字。若有写入任何数据,此函数返回
true
;否则 false 被返回。
调用此函数若需要 QAbstractSocket 立即开始发送缓冲数据。成功写入的字节数从属操作系统。在大多数情况下,不需调用此函数,因为 QAbstractSocket 将开始自动发送数据,一旦控制回到事件循环。若缺乏事件循环,调用 waitForBytesWritten () 代替。
另请参阅 write () 和 waitForBytesWritten ().
[signal]
void
QAbstractSocket::
hostFound
()
此信号被发射在 connectToHost () 有被调用且主机查找成功时。
注意: 从 Qt 4.6.3 起, QAbstractSocket 可以直接发射 hostFound() 从 connectToHost () 调用,由于已缓存 DNS 结果。
另请参阅 connected ().
[虚拟]
bool
QAbstractSocket::
isSequential
() const
重实现自 QIODevice::isSequential ().
返回
true
若套接字是有效的且准备使用;否则返回
false
.
注意: 套接字的状态必须为 ConnectedState 在读写可以发生之前。
另请参阅 state ().
返回本地套接字的主机地址 (若可用); 否则返回 QHostAddress::Null .
这通常是主机的主 IP 地址,但也可以是 QHostAddress::LocalHost (127.0.0.1) 对于到本地主机的连接。
另请参阅 localPort (), peerAddress (),和 setLocalAddress ().
返回本地套接字的主机端口号 (按本机字节序),若可用;否则返回 0。
另请参阅 localAddress (), peerPort (),和 setLocalPort ().
返回此套接字的暂停模式。
该函数在 Qt 5.0 引入。
另请参阅 setPauseMode () 和 resume ().
返回被连接对等方的地址,若套接字处于 ConnectedState ;否则返回 QHostAddress::Null .
另请参阅 peerName (), peerPort (), localAddress (),和 setPeerAddress ().
返回对等方的名称作为指定通过 connectToHost (),或空 QString if connectToHost () 没有被调用。
另请参阅 peerAddress (), peerPort (),和 setPeerName ().
返回被连接对等方的端口,若套接字处于 ConnectedState ;否则返回 0。
另请参阅 peerAddress (), localPort (),和 setPeerPort ().
返回此套接字的网络代理。默认情况下 QNetworkProxy::DefaultProxy 被使用,意味着此套接字将查询应用程序的默认代理设置。
该函数在 Qt 4.1 引入。
另请参阅 setProxy (), QNetworkProxy ,和 QNetworkProxyFactory .
[signal]
void
QAbstractSocket::
proxyAuthenticationRequired
(const
QNetworkProxy
&
proxy
,
QAuthenticator
*
authenticator
)
此信号可以被发射当 proxy 要求使用身份验证。 authenticator 然后可以采用所需的详细信息填充对象,以允许身份验证并继续连接。
注意: 使用 QueuedConnection 去连接到此信号是不可能的,因为连接会失败,若身份验证器没有采新信息被填充,当信号返回时。
该函数在 Qt 4.3 引入。
另请参阅 QAuthenticator and QNetworkProxy .
返回内部读取缓冲尺寸。这限制客户端可以接收的数据量先于调用 read () 或 readAll ().
0 (默认) 读取缓冲尺寸意味着缓冲没有大小限制,确保数据不丢失。
另请参阅 setReadBufferSize () 和 read ().
[virtual protected]
qint64
QAbstractSocket::
readData
(
char
*
data
,
qint64
maxSize
)
重实现自 QIODevice::readData ().
[virtual protected]
qint64
QAbstractSocket::
readLineData
(
char
*
data
,
qint64
maxlen
)
重实现自 QIODevice::readLineData ().
[虚拟]
void
QAbstractSocket::
resume
()
继续在套接字中传输数据。才应该使用此方法仅在套接字被设为当通知时暂停且有收到通知之后。目前唯一支持的通知是 QSslSocket::sslErrors ()。调用此方法导致不确定行为若套接字未暂停。
该函数在 Qt 5.0 引入。
另请参阅 pauseMode () 和 setPauseMode ().
[protected]
void
QAbstractSocket::
setLocalAddress
(const
QHostAddress
&
address
)
将连接的本地端地址设为 address .
可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 localAddress () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。
注意,此函数不绑定套接字的本地地址在连接之前 (如 QAbstractSocket::bind ()).
该函数在 Qt 4.1 引入。
另请参阅 localAddress (), setLocalPort (),和 setPeerAddress ().
[protected]
void
QAbstractSocket::
setLocalPort
(
quint16
port
)
将连接的本地端端口设为 port .
可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 localPort () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。
注意,此函数不绑定套接字的本地端口在连接之前 (如 QAbstractSocket::bind ()).
该函数在 Qt 4.1 引入。
另请参阅 localPort (), localAddress (), setLocalAddress (),和 setPeerPort ().
控制当收到通知时是否暂停。 pauseMode 参数指定套接字应暂停的条件。目前唯一支持的通知是 QSslSocket::sslErrors ()。若设为 PauseOnSslErrors ,套接字数据传输将暂停且再次启用需要明确调用 resume ()。默认情况下,此选项被设为 PauseNever 。必须调用此选项在连接到服务器之前,否则它将导致未定义行为。
该函数在 Qt 5.0 引入。
另请参阅 pauseMode () 和 resume ().
[protected]
void
QAbstractSocket::
setPeerAddress
(const
QHostAddress
&
address
)
将连接的远程端地址设为 address .
可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 peerAddress () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。
该函数在 Qt 4.1 引入。
另请参阅 peerAddress (), setPeerPort (),和 setLocalAddress ().
[protected]
void
QAbstractSocket::
setPeerName
(const
QString
&
name
)
将远程对等方主机名设为 name .
可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 peerName () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。
该函数在 Qt 4.1 引入。
另请参阅 peerName ().
[protected]
void
QAbstractSocket::
setPeerPort
(
quint16
port
)
将连接的远程端端口设为 port .
可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 peerPort () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。
该函数在 Qt 4.1 引入。
另请参阅 peerPort (), setPeerAddress (),和 setLocalPort ().
将此套接字的显式网络代理设为 networkProxy .
要禁用此套接字所用代理,使用 QNetworkProxy::NoProxy 代理类型:
socket->setProxy(QNetworkProxy::NoProxy);
代理的默认值为 QNetworkProxy::DefaultProxy ,意味着套接字将使用应用程序设置:若代理设置采用 QNetworkProxy::setApplicationProxy ,将使用它;否则,若工厂设置采用 QNetworkProxyFactory::setApplicationProxyFactory ,它将查询该工厂按类型 QNetworkProxyQuery::TcpSocket .
该函数在 Qt 4.1 引入。
另请参阅 proxy (), QNetworkProxy ,和 QNetworkProxyFactory::queryProxy ().
[虚拟]
void
QAbstractSocket::
setReadBufferSize
(
qint64
size
)
设置尺寸为 QAbstractSocket 的内部读取缓冲到 size 字节。
若缓冲尺寸被限制到某个大小, QAbstractSocket 不会缓冲超过此大小的数据。例外,0 缓冲尺寸意味着读取缓冲是无限的且缓冲所有传入数据。这是默认值。
此选项是有用的若仅在某时间点读取数据 (如:在实时流应用程序中),或者,若希望保护套接字以免接收太多数据 (可能最终导致应用程序内存不足)。
仅 QTcpSocket 使用 QAbstractSocket 的内部缓冲; QUdpSocket 根本不使用任何缓冲,而是依赖于由操作系统提供的隐式缓冲。因为这,调用此函数在 QUdpSocket 不起作用。
另请参阅 readBufferSize () 和 read ().
[虚拟]
bool
QAbstractSocket::
setSocketDescriptor
(
qintptr
socketDescriptor
,
SocketState
socketState
= ConnectedState,
OpenMode
openMode
= ReadWrite)
初始化
QAbstractSocket
采用本机套接字描述符
socketDescriptor
。返回
true
if
socketDescriptor
被接受作为有效套接字描述符;否则返回
false
。以指定模式打开套接字通过
openMode
,并进入指定套接字状态通过
socketState
。清零读写缓冲,丢弃任何待决数据。
注意: 采用同一本机套接字描述符初始化 2 个抽象套接字,是不可能的。
另请参阅 socketDescriptor ().
[protected]
void
QAbstractSocket::
setSocketError
(
SocketError
socketError
)
将最后出现的错误类型设为 socketError .
另请参阅 setSocketState () 和 setErrorString ().
[虚拟]
void
QAbstractSocket::
setSocketOption
(
QAbstractSocket::SocketOption
option
, const
QVariant
&
value
)
设置给定 option 到描述值 value .
注意: 在 Windows 运行时, QAbstractSocket::KeepAliveOption 必须在连接套接字之前设置。
该函数在 Qt 4.6 引入。
另请参阅 socketOption ().
[protected]
void
QAbstractSocket::
setSocketState
(
SocketState
state
)
把套接字的状态设为 state .
另请参阅 state ().
[虚拟]
qintptr
QAbstractSocket::
socketDescriptor
() const
返回本地套接字描述符为 QAbstractSocket 对象若这是可用的;否则返回 -1。
若套接字正使用 QNetworkProxy ,返回的描述符可能不能用于本机套接字函数。
套接字描述符不可用当 QAbstractSocket 是在 UnconnectedState .
另请参阅 setSocketDescriptor ().
[虚拟]
QVariant
QAbstractSocket::
socketOption
(
QAbstractSocket::SocketOption
option
)
返回值为 option 选项。
该函数在 Qt 4.6 引入。
另请参阅 setSocketOption ().
返回套接字类型 (TCP、UDP、或其它)。
另请参阅 QTcpSocket and QUdpSocket .
返回套接字的状态。
另请参阅 error ().
[signal]
void
QAbstractSocket::
stateChanged
(
QAbstractSocket::SocketState
socketState
)
此信号被发射每当 QAbstractSocket 的状态改变。 socketState 参数是新状态。
QAbstractSocket::SocketState 不是注册 Metatype (元类型),因此,对于队列化连接而言,必须注册它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().
另请参阅 state () 和 创建自定义 Qt 类型 .
[虚拟]
bool
QAbstractSocket::
waitForBytesWritten
(
int
msecs
= 30000)
重实现自 QIODevice::waitForBytesWritten ().
此函数阻塞,直到至少一字节被写入套接字和 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
。若它返回
false
,可以调用
error
() 以确定错误的原因。
以下范例最多等待 1 秒为关闭连接:
socket->disconnectFromHost(); if (socket->state() == QAbstractSocket::UnconnectedState || socket->waitForDisconnected(1000)) qDebug("Disconnected!");
若 msecs 为 -1,此函数不会超时。
注意: 该函数在 Windows 可能随机失败。考虑使用事件循环和 disconnected () 信号若软件会在 Windows 运行。
另请参阅 disconnectFromHost () 和 close ().
[虚拟]
bool
QAbstractSocket::
waitForReadyRead
(
int
msecs
= 30000)
重实现自 QIODevice::waitForReadyRead ().
此函数阻塞,直到有新数据可供读取和 readyRead() 信号已被发射。函数将超时花费 msecs 毫秒;默认超时是 30000 毫秒。
函数返回
true
若
readyRead
() 信号被发射且有新的数据可供读取;否则它返回
false
(若发生错误或操作超时)。
注意: 该函数在 Windows 可能随机失败。考虑使用事件循环和 readyRead () 信号若软件会在 Windows 运行。
另请参阅 waitForBytesWritten ().
[virtual protected]
qint64
QAbstractSocket::
writeData
(const
char
*
data
,
qint64
size
)
重实现自 QIODevice::writeData ().