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

发布了32 篇原创文章 · 获赞 1 · 访问量 241

猜你喜欢

转载自blog.csdn.net/qq_41714908/article/details/105239149
今日推荐