基於 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);
}