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