QTcpSever和QTcpSocket實現多線程客戶端和服務端;


QTcpServer提供了newConnection信號, 可以通過connect實現連接槽函數,利用nextPendingConnection

函數獲取連接的QTcpSocket * ;也可以繼承QTcpServer派生, 復寫虛函數incomingConnection(在連接上時,

會自動觸發該函數,傳參handle);

 virtual void incomingConnection(qintptr handle);

通過setSocketDescriptor 函數建立QTcpSocket;

virtual bool setSocketDescriptor(qintptr socketDescriptor, SocketState state = ConnectedState,
                             OpenMode openMode = ReadWrite);
QTcpSocket *pSock = new QTcpSocket;
if( ! pSock->setSocketDescriptor(handle) )
{
    ...
}

QTcpSocket有幾個繼承於 QAbstractSocket, 而QAbstractSocket又繼承於QIODevice, 可以看出QtcpSocket可以類似

IO接口一樣的進行操作;

virtual void connectToHost(const QString &hostName, quint16 port, OpenMode mode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);
virtual void connectToHost(const QHostAddress &address, quint16 port, OpenMode mode = ReadWrite);

通過connectToHost函數可以連接服務端, 在連接服務端時,將發送信號:

void connected();
void disconnected();
void stateChanged(QAbstractSocket::SocketState);

當socket緩沖區內有數據時,將觸發readyRead信號, 利用 bytesAvailable函數可以獲取緩沖區內的數據長度, read(length)讀取指定長度的數據;

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM