QAbstractSocket 类

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

头: #include <QAbstractSocket>
继承: QIODevice
继承者: QTcpSocket and QUdpSocket

注意: 此类的所有函数 可重入 .

公共类型

enum NetworkLayerProtocol { IPv4Protocol, IPv6Protocol, UnknownNetworkLayerProtocol }
enum SocketError { ConnectionRefusedError, RemoteHostClosedError, HostNotFoundError, SocketAccessError, ..., UnknownSocketError }
enum SocketOption { LowDelayOption, KeepAliveOption, MulticastTtlOption, MulticastLoopbackOption }
enum SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, ..., ListeningState }
enum SocketType { TcpSocket, UdpSocket, UnknownSocketType }

公共函数

QAbstractSocket (SocketType socketType , QObject * parent )
virtual ~QAbstractSocket ()
void abort ()
void connectToHost (const QString & hostName , quint16 port , OpenMode openMode = ReadWrite)
void connectToHost (const QHostAddress & address , quint16 port , OpenMode openMode = ReadWrite)
void disconnectFromHost ()
SocketError error () const
bool flush ()
bool isValid () const
QHostAddress localAddress () const
quint16 localPort () const
QHostAddress peerAddress () const
QString peerName () const
quint16 peerPort () const
QNetworkProxy proxy () const
qint64 readBufferSize () const
void setProxy (const QNetworkProxy & networkProxy )
void setReadBufferSize (qint64 size )
bool setSocketDescriptor (int socketDescriptor , SocketState socketState = ConnectedState, OpenMode openMode = ReadWrite)
void setSocketOption (QAbstractSocket::SocketOption option , const QVariant & value )
int socketDescriptor () const
QVariant socketOption (QAbstractSocket::SocketOption option )
SocketType socketType () const
SocketState state () const
bool waitForConnected (int msecs = 30000)
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 )

保护槽

void connectToHostImplementation (const QString & hostName , quint16 port , OpenMode openMode = ReadWrite)
void disconnectFromHostImplementation ()

额外继承成员

详细描述

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 () returns true if the socket is ready for reading and writing, but note that the socket's state must be ConnectedState 在读写可以发生之前。

读取或写入数据是通过调用 read () 或 write (),或使用方便函数 readLine () 和 readAll (). QAbstractSocket 还继承 getChar (), putChar (),和 ungetChar () 从 QIODevice ,操控单个字节。 bytesWritten () signal is emitted when data has been written to the socket (i.e., when the client has read the data). Note that Qt does not limit the write buffer size. You can monitor its size by listening to this signal.

The readyRead () 信号被发射每当有新数据组块到达时。 bytesAvailable () 然后返回可供读取的字节数。通常,会连接 readyRead () 信号到槽并在那里读取所有可用数据。若一次不读取所有数据,剩余数据稍后将仍可用,且任何新传入数据会被追加到 QAbstractSocket 的内部读取缓冲。要限制读取缓冲的大小,调用 setReadBufferSize ().

要关闭套接字,调用 disconnectFromHost (). QAbstractSocket 进入 QAbstractSocket::ClosingState 。在将所有待决数据写入套接字后, QAbstractSocket actually closes the socket, enters QAbstractSocket::ClosedState, and emits 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() returns false, the connection has been closed or an error has occurred.

按阻塞套接字编程彻底异于按非阻塞套接字编程。阻塞套接字不要求事件循环,且通常导致更简单代码。不管怎样,在 GUI 应用程序中,阻塞套接字只应用于非 GUI 线程,以避免冻结用户界面。见 network/fortuneclient and network/blockingfortuneclient 范例了解这 2 种方式的概述。

注意: 不鼓励将阻塞函数与信号一起使用。应该使用 2 种可能性之一。

QAbstractSocket 可以使用 QTextStream and QDataStream 的流运算符 (operator<<() 和 operator>>())。尽管有一个问题要注意:必须确保有足够数据可用,先于尝试读取它使用 operator>>().

另请参阅 QFtp , QNetworkAccessManager ,和 QTcpServer .

成员类型文档编制

enum QAbstractSocket:: NetworkLayerProtocol

此枚举描述用于 Qt 的网络层协议值。

常量 描述
QAbstractSocket::IPv4Protocol 0 IPv4
QAbstractSocket::IPv6Protocol 1 IPv6
QAbstractSocket::UnknownNetworkLayerProtocol -1 除了 IPv4 和 IPv6

另请参阅 QHostAddress::protocol ().

enum QAbstractSocket:: SocketError

此枚举描述可以发生的套接字错误。

常量 描述
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 地址指定给 QUdpSocket::bind () 已在使用中,且被设为独占。
QAbstractSocket::SocketAddressNotAvailableError 9 地址指定给 QUdpSocket::bind () 不属于主机。
QAbstractSocket::UnsupportedSocketOperationError 10 本地 OS 不支持请求的套接字操作 (如:缺乏 IPv6 支持)。
QAbstractSocket::ProxyAuthenticationRequiredError 12 套接字在使用代理,且代理要求身份验证。
QAbstractSocket::SslHandshakeFailedError 13 SSL/TLS 握手失败,所以连接被关闭 (仅用于 QSslSocket ) (This value was introduced in 4.4.)
QAbstractSocket::UnfinishedSocketOperationError 11 Used by QAbstractSocketEngine only, The last operation attempted has not finished yet (still in progress in the background). (This value was introduced in 4.4.)
QAbstractSocket::ProxyConnectionRefusedError 14 Could not contact the proxy server because the connection to that server was denied (This value was introduced in 4.5.)
QAbstractSocket::ProxyConnectionClosedError 15 The connection to the proxy server was closed unexpectedly (before the connection to the final peer was established) (This value was introduced in 4.5.)
QAbstractSocket::ProxyConnectionTimeoutError 16 The connection to the proxy server timed out or the proxy server stopped responding in the authentication phase. (This value was introduced in 4.5.)
QAbstractSocket::ProxyNotFoundError 17 代理地址设置采用 setProxy () (or the application proxy) was not found. (This value was introduced in 4.5.)
QAbstractSocket::ProxyProtocolError 18 The connection negotiation with the proxy server because the response from the proxy server could not be understood. (This value was introduced in 4.5.)
QAbstractSocket::UnknownSocketError -1 发生无法识别的错误。

另请参阅 QAbstractSocket::error ().

enum QAbstractSocket:: SocketOption

此枚举表示套接字可以设置的选项。若期望,可以设置它们后于收到 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 (多点播送回环) 套接字选项。

该枚举在 Qt 4.6 引入或被修改。

另请参阅 QAbstractSocket::setSocketOption () 和 QAbstractSocket::socketOption ().

enum QAbstractSocket:: SocketState

此枚举描述套接字可以处于的不同状态。

常量 描述
QAbstractSocket::UnconnectedState 0 套接字未连接。
QAbstractSocket::HostLookupState 1 套接字正在履行主机名查找。
QAbstractSocket::ConnectingState 2 套接字开始建立连接。
QAbstractSocket::ConnectedState 3 已建立连接。
QAbstractSocket::BoundState 4 The socket is bound to an address and port (for servers).
QAbstractSocket::ClosingState 6 套接字即将关闭 (数据可能仍在等待被写入)。
QAbstractSocket::ListeningState 5 仅供内部使用。

另请参阅 QAbstractSocket::state ().

enum QAbstractSocket:: SocketType

此枚举描述传输层协议。

常量 描述
QAbstractSocket::TcpSocket 0 TCP
QAbstractSocket::UdpSocket 1 UDP
QAbstractSocket::UnknownSocketType -1 Other than TCP and UDP

另请参阅 QAbstractSocket::socketType ().

成员函数文档编制

QAbstractSocket:: QAbstractSocket ( SocketType socketType , QObject * parent )

创建新的抽象套接字为类型 socketType parent 自变量会被传递给 QObject 的构造函数。

另请参阅 socketType (), QTcpSocket ,和 QUdpSocket .

[虚拟] QAbstractSocket:: ~QAbstractSocket ()

销毁套接字。

void QAbstractSocket:: abort ()

中止当前连接并重置套接字。不像 disconnectFromHost (),此函数立即关闭套接字,丢弃写缓冲中任何待决数据。

另请参阅 disconnectFromHost () 和 close ().

[虚拟] bool QAbstractSocket:: atEnd () const

重实现自 QIODevice::atEnd ().

Returns true if no more data is currently available for reading; otherwise returns false.

此函数最常用于以循环方式从套接字读取数据。例如:

 // This slot is connected to QAbstractSocket::readyRead()
 void SocketClass::readyReadSlot()
 {
     while (!socket.atEnd()) {
         QByteArray data = socket.read(100);
         ....
     }
 }
					

另请参阅 bytesAvailable () 和 readyRead ().

[虚拟] qint64 QAbstractSocket:: bytesAvailable () const

重实现自 QIODevice::bytesAvailable ().

返回等待读取的传入字节数。

另请参阅 bytesToWrite () 和 read ().

[虚拟] qint64 QAbstractSocket:: bytesToWrite () const

重实现自 QIODevice::bytesToWrite ().

返回等待写入的字节数。写入字节当控制回到事件循环或当 flush () 被调用。

另请参阅 bytesAvailable () 和 flush ().

[虚拟] bool QAbstractSocket:: canReadLine () const

重实现自 QIODevice::canReadLine ().

Returns true if a line of data can be read from the socket; otherwise returns false.

另请参阅 readLine ().

[虚拟] void QAbstractSocket:: close ()

重实现自 QIODevice::close ().

Closes the I/O device for the socket, disconnects the socket's connection with the host, closes the socket, and resets the name, address, port number and underlying socket descriptor.

QIODevice::close () 了解当关闭 I/O 设备时出现动作的描述。

另请参阅 abort ().

void QAbstractSocket:: connectToHost (const QString & hostName , quint16 port , OpenMode openMode = ReadWrite)

试图连接到 hostName 在给定 port .

套接字被打开采用给定 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 .

[protected slot] void QAbstractSocket:: connectToHostImplementation (const QString & hostName , quint16 port , OpenMode openMode = ReadWrite)

Contains the implementation of connectToHost ().

试图连接到 hostName 在给定 port . The socket is opened in the given openMode .

该函数在 Qt 4.1 引入。

[signal] void QAbstractSocket:: connected ()

此信号发射后于 connectToHost () 有被调用且连接已成功建立。

注意: 在某些操作系统,可以直接发射 connected() 信号从 connectToHost () 调用对于连接到本地主机。

另请参阅 connectToHost () 和 disconnected ().

void QAbstractSocket:: disconnectFromHost ()

试图关闭套接字。若有等待写入的待决数据, QAbstractSocket 将进入 ClosingState 并等待直到所有数据被写入。最终,它将进入 UnconnectedState 和发射 disconnected () 信号。

另请参阅 connectToHost ().

[protected slot] void QAbstractSocket:: disconnectFromHostImplementation ()

Contains the implementation of disconnectFromHost ().

该函数在 Qt 4.1 引入。

[signal] void QAbstractSocket:: disconnected ()

此信号被发射当套接字断开连接时。

警告: 若需要删除 sender () 为此信号在连接到它的槽中,使用 deleteLater() 函数。

另请参阅 connectToHost (), disconnectFromHost (),和 abort ().

SocketError QAbstractSocket:: error () const

返回最后发生的错误类型。

另请参阅 state () 和 errorString ().

[signal] void QAbstractSocket:: error ( QAbstractSocket::SocketError socketError )

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

QAbstractSocket::SocketError 不是注册 Metatype (元类型),因此,对于队列化连接而言,必须注册它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().

注意: 信号 error 在此类中是重载。要使用函数指针句法连接到此信号,必须在静态铸造中指定信号类型,如此范例所示:

connect(abstractSocket, static_cast<void(QAbstractSocket::*)(QAbstractSocket::SocketError)>(&QAbstractSocket::error),
    [=](QAbstractSocket::SocketError socketError){ /* ... */ });
					

另请参阅 error (), errorString (),和 创建自定义 Qt 类型 .

bool QAbstractSocket:: flush ()

This function writes as much as possible from the internal write buffer to the underlying network socket, without blocking. If any data was written, this function returns true; otherwise false is returned.

调用此函数若需要 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 ().

bool QAbstractSocket:: isValid () const

Returns true if the socket is valid and ready for use; otherwise returns false.

注意: 套接字的状态必须为 ConnectedState 在读写可以发生之前。

另请参阅 state ().

QHostAddress QAbstractSocket:: localAddress () const

返回本地套接字的主机地址 (若可用); 否则返回 QHostAddress::Null .

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

另请参阅 localPort (), peerAddress (),和 setLocalAddress ().

quint16 QAbstractSocket:: localPort () const

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

另请参阅 localAddress (), peerPort (),和 setLocalPort ().

QHostAddress QAbstractSocket:: peerAddress () const

返回被连接对等方的地址,若套接字处于 ConnectedState ;否则返回 QHostAddress::Null .

另请参阅 peerName (), peerPort (), localAddress (),和 setPeerAddress ().

QString QAbstractSocket:: peerName () const

返回对等方的名称作为指定通过 connectToHost (),或空 QString if connectToHost () 没有被调用。

另请参阅 peerAddress (), peerPort (),和 setPeerName ().

quint16 QAbstractSocket:: peerPort () const

返回被连接对等方的端口,若套接字处于 ConnectedState ;否则返回 0。

另请参阅 peerAddress (), localPort (),和 setPeerPort ().

QNetworkProxy QAbstractSocket:: proxy () const

返回此套接字的网络代理。默认情况下 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 .

qint64 QAbstractSocket:: readBufferSize () const

返回内部读取缓冲尺寸。这限制客户端可以接收的数据量先于调用 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 ().

[protected] void QAbstractSocket:: setLocalAddress (const QHostAddress & address )

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

可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 localAddress () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。

注意,此函数不绑定套接字的本地地址在连接之前 (如 QUdpSocket::bind ()).

该函数在 Qt 4.1 引入。

另请参阅 localAddress (), setLocalPort (),和 setPeerAddress ().

[protected] void QAbstractSocket:: setLocalPort ( quint16 port )

将连接的本地端端口设为 port .

可以调用此函数在子类化的 QAbstractSocket 以改变返回值为 localPort () 函数在已建立连接后。此特征通常用于代理连接为虚拟连接设置。

注意,此函数不绑定套接字的本地端口在连接之前 (如 QUdpSocket::bind ()).

该函数在 Qt 4.1 引入。

另请参阅 localPort (), localAddress (), setLocalAddress (),和 setPeerPort ().

[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 ().

void QAbstractSocket:: setProxy (const QNetworkProxy & networkProxy )

将此套接字的显式网络代理设为 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 ( int socketDescriptor , SocketState socketState = ConnectedState, OpenMode openMode = ReadWrite)

初始化 QAbstractSocket 采用本机套接字描述符 socketDescriptor . Returns true if socketDescriptor is accepted as a valid socket descriptor; otherwise returns false. The socket is opened in the mode specified by openMode ,并进入指定套接字状态通过 socketState .

注意: 采用同一本机套接字描述符初始化 2 个抽象套接字,是不可能的。

另请参阅 socketDescriptor ().

[protected] void QAbstractSocket:: setSocketError ( SocketError socketError )

将最后出现的错误类型设为 socketError .

另请参阅 setSocketState () 和 setErrorString ().

void QAbstractSocket:: setSocketOption ( QAbstractSocket::SocketOption option , const QVariant & value )

设置给定 option 到描述值 value .

该函数在 Qt 4.6 引入。

另请参阅 socketOption ().

[protected] void QAbstractSocket:: setSocketState ( SocketState state )

把套接字的状态设为 state .

另请参阅 state ().

int QAbstractSocket:: socketDescriptor () const

返回本地套接字描述符为 QAbstractSocket 对象若这是可用的;否则返回 -1。

若套接字正使用 QNetworkProxy ,返回的描述符可能不能用于本机套接字函数。

套接字描述符不可用当 QAbstractSocket 是在 UnconnectedState .

另请参阅 setSocketDescriptor ().

QVariant QAbstractSocket:: socketOption ( QAbstractSocket::SocketOption option )

返回值为 option 选项。

该函数在 Qt 4.6 引入。

另请参阅 setSocketOption ().

SocketType QAbstractSocket:: socketType () const

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

另请参阅 QTcpSocket and QUdpSocket .

SocketState QAbstractSocket:: state () const

返回套接字的状态。

另请参阅 error ().

[signal] void QAbstractSocket:: stateChanged ( QAbstractSocket::SocketState socketState )

此信号发射每当 QAbstractSocket 的状态改变。 socketState 参数是新状态。

QAbstractSocket::SocketState 不是已注册 Metatype (元类型),因此对于队列连接,必须注册它采用 Q_REGISTER_METATYPE() 和 qRegisterMetaType ().

另请参阅 state () 和 创建自定义 Qt 类型 .

[虚拟] bool QAbstractSocket:: waitForBytesWritten ( int msecs = 30000)

重实现自 QIODevice::waitForBytesWritten ().

bool QAbstractSocket:: waitForConnected ( int msecs = 30000)

等待直到套接字被连接,最长 msecs milliseconds. If the connection has been established, this function returns true; otherwise it returns false. In the case where it returns false, you can call error () 以确定错误的原因。

以下范例最多等待 1 秒为建立连接:

socket->connectToHost("imap", 143);
if (socket->waitForConnected(1000))
    qDebug("Connected!");
					

若 msecs 为 -1,此函数不会超时。

注意: 此函数的等待时间可能稍微长于 msecs ,从属完成主机查找所花费的时间。

注意: 多次调用此函数不累计时间。若函数超时,连接过程将中止。

另请参阅 connectToHost () 和 connected ().

bool QAbstractSocket:: waitForDisconnected ( int msecs = 30000)

等待直到套接字已断开连接,最长 msecs milliseconds. If the connection has been disconnected, this function returns true; otherwise it returns false. In the case where it returns false, you can call error () 以确定错误的原因。

以下范例最多等待 1 秒为关闭连接:

socket->disconnectFromHost();
    if (socket->state() == QAbstractSocket::UnconnectedState ||
        socket->waitForDisconnected(1000))
        qDebug("Disconnected!");
					

若 msecs 为 -1,此函数不会超时。

另请参阅 disconnectFromHost () 和 close ().

[虚拟] bool QAbstractSocket:: waitForReadyRead ( int msecs = 30000)

重实现自 QIODevice::waitForReadyRead ().

此函数阻塞,直到有新数据可供读取和 readyRead() 信号已被发射。函数将超时花费 msecs 毫秒;默认超时是 30000 毫秒。

The function returns true if the readyRead () signal is emitted and there is new data available for reading; otherwise it returns false (if an error occurred or the operation timed out).

另请参阅 waitForBytesWritten ().

[virtual protected] qint64 QAbstractSocket:: writeData (const char * data , qint64 size )

重实现自 QIODevice::writeData ().