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