QTcpserver

基於 QTcpserver 的 demo.



Header:#include
qmake:QT += network


創建服務器socket.

QTcpServer *ser;                //定義服務器對象
ser = new QTcpServer(this);     //創建服務器socket
```      
### 綁定和監聽
```c++
ser->listen(QHostAddress::Any, PORT); //設置爲監聽模式   這裏的Any代表默認獲取本地的IP,如果需要指定IP:ser->listen(QHostAddress("IP"), PORT);
```       
### 獲取服務端的IP和PORT
```c++
QString serIP = ser->serverAddress().toString();
QString serPORT = QString::number(ser->serverPort());

ui->label->setText("IP: " + serIP);
ui->label_2->setText("PORT: " + serPORT);
```        
### 監聽這裏可以判斷一下是否成功監聽
```c++
if(ser->listen(QHostAddress::Any, PORT))
{
        qDebug() << "listen ok";
}
else
        qDebug() << "listen false";
```              
### 監聽到有新的連接成功之後會受到一個newConnection()信號,這個時候需要通過connect去關聯成功連接信號,同時寫一個回調的槽函數newConnect()
```c++
connect(ser, SIGNAL(newConnection()), this, SLOT(newConnect()));//關聯連接請求信號  newConnection() 新的連接請求信號   newConnect() 用戶編寫的槽函數
```        
----  

### 關聯新連接的槽函數的編寫
```c++
//處理客戶斷的連接請求
void MainWindow::newConnect()
{
        //服務器之負責接受連接請求,不負責通信
        //產生新的通信對象

        QTcpSocket *new_clien = ser->nextPendingConnection();
        //打印連接者的主機名、端口、IP
        QString name = new_clien->peerName();
        QString port = QString::number(new_clien->peerPort());
        QString ip   = new_clien->peerAddress().toString();

        ui->textBrowser->append(name);
        ui->textBrowser->append(port);
        ui->textBrowser->append(ip);
        
        //當需要實現服務端能接收信息   (必須寫在 new_clien 創建/接收成功後)
        connect(new_clien, SIGNAL(readyRead()), this, SLOT(readData())); //關聯可讀信息信號  readyRead() 可讀信息信號    readData() 用戶編寫的讀數據槽函數
}


接收可讀信號的槽函數
.

void MainWindow::readData()
{
        QString msg = new_clien->readAll();

        ui->msg_browser->append(msg);
}

我的GITHUB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章