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

QTcpServer提供了newConnection信號, 能夠經過connect實現鏈接槽函數,利用nextPendingConnectionsocket

函數獲取鏈接的QTcpSocket * ;也能夠繼承QTcpServer派生, 複寫虛函數incomingConnection(在鏈接上時,tcp

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

 virtual void incomingConnection(qintptr handle);

經過setSocketDescriptor 函數創建QTcpSocket;ui

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

QTcpSocket有幾個繼承於 QAbstractSocket, 而QAbstractSocket又繼承於QIODevice, 能夠看出QtcpSocket能夠相似blog

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)讀取指定長度的數據;ip

相關文章
相關標籤/搜索