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, SocketResourceError, …, UnknownSocketError } |
enum | SocketOption { LowDelayOption, KeepAliveOption, MulticastTtlOption, MulticastLoopbackOption, TypeOfServiceOption, …, PathMtuSocketOption } |
enum | SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState } |
enum | SocketType { TcpSocket, UdpSocket, SctpSocket, UnknownSocketType } |
QAbstractSocket (QAbstractSocket::SocketType socketType , QObject * parent ) | |
virtual | ~QAbstractSocket () |
void | abort () |
bool | bind (const QHostAddress & address , quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform) |
bool | bind (quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform) |
virtual void | connectToHost (const QString & hostName , quint16 port , QIODevice::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol) |
virtual void | connectToHost (const QHostAddress & address , quint16 port , QIODevice::OpenMode openMode = ReadWrite) |
virtual void | disconnectFromHost () |
QAbstractSocket::SocketError | error () const |
bool | flush () |
bool | isValid () const |
QHostAddress | localAddress () const |
quint16 | localPort () const |
QAbstractSocket::PauseModes | pauseMode () const |
QHostAddress | peerAddress () const |
QString | peerName () const |
quint16 | peerPort () const |
QString | protocolTag () const |
QNetworkProxy | proxy () const |
qint64 | readBufferSize () const |
virtual void | resume () |
void | setPauseMode (QAbstractSocket::PauseModes pauseMode ) |
void | setProtocolTag (const QString & tag ) |
void | setProxy (const QNetworkProxy & networkProxy ) |
virtual void | setReadBufferSize (qint64 size ) |
virtual bool | setSocketDescriptor (qintptr socketDescriptor , QAbstractSocket::SocketState socketState = ConnectedState, QIODevice::OpenMode openMode = ReadWrite) |
virtual void | setSocketOption (QAbstractSocket::SocketOption option , const QVariant & value ) |
virtual qintptr | socketDescriptor () const |
virtual QVariant | socketOption (QAbstractSocket::SocketOption option ) |
QAbstractSocket::SocketType | socketType () const |
QAbstractSocket::SocketState | state () const |
virtual bool | waitForConnected (int msecs = 30000) |
virtual bool | waitForDisconnected (int msecs = 30000) |
virtual bool | atEnd () const override |
virtual qint64 | bytesAvailable () const override |
virtual qint64 | bytesToWrite () const override |
virtual bool | canReadLine () const override |
virtual void | close () override |
virtual bool | isSequential () const override |
virtual bool | waitForBytesWritten (int msecs = 30000) override |
virtual bool | waitForReadyRead (int msecs = 30000) override |
void | connected () |
void | disconnected () |
void | errorOccurred (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 (QAbstractSocket::SocketError socketError ) |
void | setSocketState (QAbstractSocket::SocketState state ) |
virtual qint64 | readData (char * data , qint64 maxSize ) override |
virtual qint64 | readLineData (char * data , qint64 maxlen ) override |
virtual qint64 | writeData (const char * data , qint64 size ) override |
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
()。若在任何阶段出现错误,
errorOccurred
() 被发射。每当状态改变时,
stateChanged
() 被发射。为方便起见,
isValid
() 返回
true
若套接字读/写就绪,但请注意,套接字状态必须为
ConnectedState
在读写可以发生之前。
读取或写入数据是通过调用 read () 或 write (),或使用方便函数 readLine () 和 readAll ()。QAbstractSocket 还继承 getChar (), putChar (),和 ungetChar () 从 QIODevice ,操控单个字节。 bytesWritten () 信号被发射当已将数据写入套接字时。注意 Qt 不限制写入缓冲大小。可以监视其大小,通过监听此信号。
The readyRead () 信号被发射每当有新数据组块到达时。 bytesAvailable () 然后返回可供读取的字节数。通常,会连接 readyRead () signal to a slot and read all available data there. If you don't read all the data at once, the remaining data will still be available later, and any new incoming data will be appended to QAbstractSocket's internal read buffer. To limit the size of the read buffer, call setReadBufferSize ().
要关闭套接字,调用 disconnectFromHost (). QAbstractSocket enters QAbstractSocket::ClosingState . After all pending data has been written to the socket, QAbstractSocket actually closes the socket, enters QAbstractSocket::UnconnectedState ,和发射 disconnected ()。若想要立即中止连接,丢弃所有待决数据,调用 abort () instead. If the remote host closes the connection, QAbstractSocket will emit errorOccurred ( QAbstractSocket::RemoteHostClosedError ),在此期间,套接字状态将仍然是 ConnectedState ,然后 disconnected () 信号会被发射。
连接对等方端口和地址的抓取是通过调用 peerPort () 和 peerAddress (). peerName () 返回对等方主机名,如传递给 connectToHost (). localPort () 和 localAddress () 返回本地套接字的端口和地址。
QAbstractSocket provides a set of functions that suspend the calling thread until certain signals are emitted. These functions can be used to implement blocking sockets:
举例说明:
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 can be used with QTextStream and QDataStream 的流运算符 (operator<<() 和 operator>>())。尽管有一个问题要注意:必须确保有足够数据可用,先于尝试读取它使用 operator>>().
另请参阅 QNetworkAccessManager and QTcpServer .
此枚举描述的不同标志可以传递给行为修改 QAbstractSocket::bind ().
常量 | 值 | 描述 |
---|---|---|
QAbstractSocket::ShareAddress
|
0x1
|
Allow other services to bind to the same address and port. This is useful when multiple processes share the load of a single service by listening to the same address and port (e.g., a web server with several pre-forked listeners can greatly improve response time). However, because any service is allowed to rebind, this option is subject to certain security considerations. Note that by combining this option with ReuseAddressHint, you will also allow your service to rebind an existing shared address. On Unix, this is equivalent to the SO_REUSEADDR socket option. On Windows, this is the default behavior, so this option is ignored. |
QAbstractSocket::DontShareAddress
|
0x2
|
独占绑定地址和端口,所以不允许重新绑定其它服务。通过将此选项传递给 QAbstractSocket::bind (), you are guaranteed that on success, your service is the only one that listens to the address and port. No services are allowed to rebind, even if they pass ReuseAddressHint. This option provides more security than ShareAddress, but on certain operating systems, it requires you to run the server with administrator privileges. On Unix and macOS, not sharing is the default behavior for binding an address and port, so this option is ignored. On Windows, this option uses the SO_EXCLUSIVEADDRUSE socket option. |
QAbstractSocket::ReuseAddressHint
|
0x4
|
提供提示为 QAbstractSocket 应该试着重新绑定服务,即使地址和端口已被另一套接字绑定。在 Windows 和 Unix,这相当于 SO_REUSEADDR 套接字选项。 |
QAbstractSocket::DefaultForPlatform
|
0x0
|
The default option for the current platform. On Unix and macOS, this is equivalent to (DontShareAddress + ReuseAddressHint), and on Windows, it is equivalent to 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 ().
This enum describes the behavior of when the socket should hold back with continuing data transfer. The only notification currently supported is QSslSocket::sslErrors().
常量 | 值 | 描述 |
---|---|---|
QAbstractSocket::PauseNever
|
0x0
|
Do not pause data transfer on the socket. This is the default and matches the behavior of Qt 4. |
QAbstractSocket::PauseOnSslErrors
|
0x1
|
Pause data transfer on the socket upon receiving an SSL error notification. I.E. 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 () 和 QAbstractSocket::errorOccurred ().
此枚举表示套接字可以设置的选项。若期望,可以设置它们后于收到 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 引入。 |
QAbstractSocket::PathMtuSocketOption
|
7
|
Retrieves the Path Maximum Transmission Unit (PMTU) value currently known by the IP stack, if any. Some IP stacks also allow setting the MTU for transmission. This enum value was introduced in Qt 5.11. |
可能的值对于 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 .
[signal]
void
QAbstractSocket::
connected
()
此信号发射后于 connectToHost () 有被调用且连接已成功建立。
注意: 在某些操作系统,可以直接发射 connected() 信号从 connectToHost () 调用对于连接到本地主机。
另请参阅 connectToHost () 和 disconnected ().
[signal]
void
QAbstractSocket::
disconnected
()
此信号被发射当套接字断开连接时。
警告: 若需要删除 sender () 为此信号在连接到它的槽中,使用 deleteLater() 函数。
另请参阅 connectToHost (), disconnectFromHost (),和 abort ().
[signal]
void
QAbstractSocket::
errorOccurred
(
QAbstractSocket::SocketError
socketError
)
此信号发射,在发生错误后。 socketError 参数描述出现错误的类型。
当发射此信号时,套接字试图重新连接可能还未就绪。在此情况下,试图重新连接应该是从事件循环。例如,使用 QTimer::singleShot () 采用 0 作为超时。
QAbstractSocket::SocketError 不是注册 Metatype (元类型),因此,对于队列化连接而言,必须注册它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().
该函数在 Qt 5.15 引入。
另请参阅 error (), errorString (),和 创建自定义 Qt 类型 .
[signal]
void
QAbstractSocket::
hostFound
()
此信号发射后于 connectToHost () 有被调用且主机查找成功时。
注意: 从 Qt 4.6.3 起, QAbstractSocket 可以直接发射 hostFound() 从 connectToHost () 调用,由于已缓存 DNS 结果。
另请参阅 connected ().
[signal]
void
QAbstractSocket::
proxyAuthenticationRequired
(const
QNetworkProxy
&
proxy
,
QAuthenticator
*
authenticator
)
此信号可以被发射当 proxy 要求使用身份验证。 authenticator 然后可以采用所需的详细信息填充对象,以允许身份验证并继续连接。
注意: 使用 QueuedConnection 去连接到此信号是不可能的,因为连接会失败,若身份验证器没有采新信息被填充,当信号返回时。
该函数在 Qt 4.3 引入。
另请参阅 QAuthenticator and QNetworkProxy .
[signal]
void
QAbstractSocket::
stateChanged
(
QAbstractSocket::SocketState
socketState
)
此信号发射每当 QAbstractSocket 的状态改变。 socketState 参数是新状态。
QAbstractSocket::SocketState 不是注册 Metatype (元类型),因此,对于队列化连接而言,必须注册它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().
另请参阅 state () 和 创建自定义 Qt 类型 .
[虚拟]
QAbstractSocket::
~QAbstractSocket
()
销毁套接字。
中止当前连接并重置套接字。不像 disconnectFromHost (),此函数立即关闭套接字,丢弃写缓冲中任何待决数据。
另请参阅 disconnectFromHost () 和 close ().
[override virtual]
bool
QAbstractSocket::
atEnd
() const
重实现: QIODevice::atEnd () const.
返回
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 .
对于 UDP 套接字,绑定后信号 QUdpSocket::readyRead () 被发射每当 UDP 数据报到达指定地址和端口时。因此,此函数对编写 UDP 服务器很有用。
对于 TCP 套接字,此函数可以用于指定对外连接要使用哪个接口,在多网络接口情况下很有用。
默认情况下,绑定套接字使用 DefaultForPlatform BindMode 。若端口未指定,选择随机端口。
当成功时,函数返回
true
和套接字进入
BoundState
;否则,返回
false
.
该函数在 Qt 5.0 引入。
这是重载函数。
绑定到 QHostAddress :任何在端口 port ,使用 BindMode mode .
默认情况下,绑定套接字使用 DefaultForPlatform BindMode 。若端口未指定,选择随机端口。
该函数在 Qt 5.0 引入。
[override virtual]
qint64
QAbstractSocket::
bytesAvailable
() const
重实现: QIODevice::bytesAvailable () const.
返回等待读取的传入字节数。
另请参阅 bytesToWrite () 和 read ().
[override virtual]
qint64
QAbstractSocket::
bytesToWrite
() const
重实现: QIODevice::bytesToWrite () const.
返回等待写入的字节数。写入字节当控制回到事件循环或当 flush () 被调用。
另请参阅 bytesAvailable () 和 flush ().
[override virtual]
bool
QAbstractSocket::
canReadLine
() const
重实现: QIODevice::canReadLine () const.
返回
true
若可以从套接字读取一行数据;否则返回
false
.
另请参阅 readLine ().
[override virtual]
void
QAbstractSocket::
close
()
重实现: QIODevice::close ().
关闭 I/O 设备为套接字和调用 disconnectFromHost () 以关闭套接字连接。
见 QIODevice::close () 了解当关闭 I/O 设备时出现动作的描述。
另请参阅 abort ().
[虚拟]
void
QAbstractSocket::
connectToHost
(const
QString
&
hostName
,
quint16
port
,
QIODevice::OpenMode
openMode
= ReadWrite,
QAbstractSocket::NetworkLayerProtocol
protocol
= AnyIPProtocol)
试图连接到 hostName 在给定 port 。 protocol 参数可以用于指定要使用哪种网络协议 (如 IPv4 或 IPv6)。
套接字被打开采用给定 openMode 并首先进入 HostLookupState ,然后履行查找主机名 hostName 。若查找成功, hostFound () 被发射和 QAbstractSocket 进入 ConnectingState 。然后,试图连接到地址 (或由查找返回的地址)。最后,若建立连接, QAbstractSocket 进入 ConnectedState 并发射 connected ().
在任何时候,套接字可以发射 errorOccurred () 给 (发出错误的) 信号。
hostName 可以是字符串形式的 IP 地址 (如 43.195.83.32),或者它可以是主机名 (如 example.com)。 QAbstractSocket 将仅在要求时才查找。 port 是本机字节序。
另请参阅 state (), peerName (), peerAddress (), peerPort (),和 waitForConnected ().
[虚拟]
void
QAbstractSocket::
connectToHost
(const
QHostAddress
&
address
,
quint16
port
,
QIODevice::OpenMode
openMode
= ReadWrite)
这是重载函数。
试图连接到 address 在端口 port .
[虚拟]
void
QAbstractSocket::
disconnectFromHost
()
试图关闭套接字。若有等待写入的待决数据, QAbstractSocket 将进入 ClosingState 并等待直到所有数据被写入。最终,它将进入 UnconnectedState 和发射 disconnected () 信号。
另请参阅 connectToHost ().
返回最后发生的错误类型。
另请参阅 state () 和 errorString ().
此函数不阻塞且尽可能多地,把内部缓冲写入到底层网络套接字。若有写入任何数据,此函数返回
true
;否则 false 被返回。
调用此函数若需要 QAbstractSocket 立即开始发送缓冲数据。成功写入的字节数从属操作系统。在大多数情况下,不需调用此函数,因为 QAbstractSocket 将开始自动发送数据,一旦控制回到事件循环。若缺乏事件循环,调用 waitForBytesWritten () 代替。
另请参阅 write () 和 waitForBytesWritten ().
[override virtual]
bool
QAbstractSocket::
isSequential
() const
重实现: QIODevice::isSequential () const.
返回
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 ().
Returns the protocol tag for this socket. If the protocol tag is set then this is passed to QNetworkProxyQuery when this is created internally to indicate the protocol tag to be used.
该函数在 Qt 5.13 引入。
另请参阅 setProtocolTag () 和 QNetworkProxyQuery .
返回此套接字的网络代理。默认情况下 QNetworkProxy::DefaultProxy 被使用,意味着此套接字将查询应用程序的默认代理设置。
该函数在 Qt 4.1 引入。
另请参阅 setProxy (), QNetworkProxy ,和 QNetworkProxyFactory .
返回内部读取缓冲尺寸。这限制客户端可以接收的数据量先于调用 read () 或 readAll ().
0 (默认) 读取缓冲尺寸意味着缓冲没有大小限制,确保数据不丢失。
另请参阅 setReadBufferSize () 和 read ().
[override virtual protected]
qint64
QAbstractSocket::
readData
(
char
*
data
,
qint64
maxSize
)
重实现: QIODevice::readData (char *data, qint64 maxSize).
[override virtual protected]
qint64
QAbstractSocket::
readLineData
(
char
*
data
,
qint64
maxlen
)
重实现: QIODevice::readLineData (char *data, qint64 maxSize).
[虚拟]
void
QAbstractSocket::
resume
()
Continues data transfer on the socket. This method should only be used after the socket has been set to pause upon notifications and a notification has been received. The only notification currently supported is QSslSocket::sslErrors(). Calling this method if the socket is not paused results in undefined behavior.
该函数在 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 parameter specifies the conditions in which the socket should be paused. The only notification currently supported is QSslSocket::sslErrors(). If set to 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 ().
把此套接字的协议 Tag 设为 tag .
该函数在 Qt 5.13 引入。
另请参阅 protocolTag ().
将此套接字的显式网络代理设为 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
,
QAbstractSocket::SocketState
socketState
= ConnectedState,
QIODevice::OpenMode
openMode
= ReadWrite)
初始化
QAbstractSocket
采用本机套接字描述符
socketDescriptor
。返回
true
if
socketDescriptor
被接受作为有效套接字描述符;否则返回
false
。以指定模式打开套接字通过
openMode
,并进入指定套接字状态通过
socketState
。清零读写缓冲,丢弃任何待决数据。
注意: 采用同一本机套接字描述符初始化 2 个抽象套接字,是不可能的。
另请参阅 socketDescriptor ().
[protected]
void
QAbstractSocket::
setSocketError
(
QAbstractSocket::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
(
QAbstractSocket::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 ().
[override virtual]
bool
QAbstractSocket::
waitForBytesWritten
(
int
msecs
= 30000)
重实现: QIODevice::waitForBytesWritten (int msecs).
此函数阻塞,直到至少一字节被写入套接字和 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
(若操作超时,若发生错误,或者若此
QAbstractSocket
已经断开连接)。若它返回
false
,可以调用
error
() 以确定错误的原因。
以下范例最多等待 1 秒为关闭连接:
socket->disconnectFromHost(); if (socket->state() == QAbstractSocket::UnconnectedState || socket->waitForDisconnected(1000)) { qDebug("Disconnected!"); }
若 msecs 为 -1,此函数不会超时。
注意: 该函数在 Windows 可能随机失败。考虑使用事件循环和 disconnected () 信号若软件会在 Windows 运行。
另请参阅 disconnectFromHost () 和 close ().
[override virtual]
bool
QAbstractSocket::
waitForReadyRead
(
int
msecs
= 30000)
重实现: QIODevice::waitForReadyRead (int msecs).
此函数阻塞,直到有新数据可供读取和 readyRead() 信号已被发射。函数将超时花费 msecs 毫秒;默认超时是 30000 毫秒。
函数返回
true
若
readyRead
() 信号被发射且有新的数据可供读取;否则它返回
false
(若发生错误或操作超时)。
注意: 该函数在 Windows 可能随机失败。考虑使用事件循环和 readyRead () 信号若软件会在 Windows 运行。
另请参阅 waitForBytesWritten ().
[override virtual protected]
qint64
QAbstractSocket::
writeData
(const
char
*
data
,
qint64
size
)
重实现: QIODevice::writeData (const char *data, qint64 maxSize).