QT网络编程——TCP客户端连接到服务器

32 篇文章 24 订阅
10 篇文章 2 订阅

前言

1.在Qt中,QtNetwork模块是用来进行网络编程,Qt提供了一层统一的套接字抽象用于编写不同层次的网络程序,避免了应用套接字进行网络编的繁琐,对不同平台,Qt都可以很好的支持,不用另外添加别的库。
2.而TCP:(Transmission Control Protocol 传输控制协议)是网络编程的其中一种,它是面向连接的相对可靠的基于字节流的传输层通信协议。相比UDP的开放式无连接不可靠的传输层通信协议安全性要好一些。
3.我的开发环境是:QT Creator 5.7,我最终的项目是想做成客户端与服务器能互发文本信息,上传、下载文件,互发图像文件,就是客户端往服务器发送图像,服务器器接收成功之后,使用OpenCV做相关的图像处理之后返回之前发出的服务器。

服务器

1.新建一个TCPServer的项目,然后在pro文件里面添加QtNetwork模型。代码如下:

QT     += network

2.因为可视化可以更好的体现整个流程,这里我用Qt搭了一个简易的界面,如下图:
在这里插入图片描述
这里我指定的服务器的IP地址为127.0.0.1,端口是8000,这个也可以按自己的需求改。
3.然后给监听这个功能添加代码,运行程序之后,只有你点击监听这个按键,服务器才算正式启动,开始监听是新的客户端开始连接。

//启动服务器开始监听
void Server::on_buttonMonitor_clicked()
{
    //监听所有IP地址
    bool monitor = tcpServer->listen(QHostAddress::Any,ui->lineEditServerPorts->text().toInt());
    //按键状态
    if(monitor)
    {
        ui->buttonMonitor->setEnabled(false);
        ui->buttonDisconnect->setEnabled(true);
        ui->textEditStatus->append("开始监端口......");

    }
    else
    {
        ui->textEditStatus->append("启动服务器失败!");
    }
}

4.断开服务器,当有客户端还连接的时候,会等待指定的时间之后再断开。

//断开与所有客户端的连接
void Server::on_buttonDisconnect_clicked()
{
    //如果有客户端连接
    if(tcpClient.length() > 0)
    {
        for(int i = 0; i < tcpClient.length();i++)
        {
            //断开
            tcpClient.at(i)->disconnectFromHost();
            //等待
            bool dis = tcpClient.at(i)->waitForDisconnected(10000);
            if(dis)
            {
                //删除客户端
                tcpClient.removeAt(i);
            }
            else
            {
                ui->textEditStatus->append("断开连接失败!");
            }
        }
        tcpServer->close();
        ui->buttonMonitor->setEnabled(true);
        ui->buttonDisconnect->setEnabled(false);
        ui->textEditStatus->append("断开连接成功!");
    }
    else
    {
        ui->textEditStatus->append("当前没有连接的客户端!");
    }
}

客户端

1.新建一个TCPClient的项目,然后在pro文件里面添加QtNetwork模型。代码如下:

QT     += network

2.客商的界面如下图:
在这里插入图片描述
3.连接按键添加代码。

//连接服务器
void Client::on_buttonConnect_clicked()
{
    tcpClient->connectToHost(ui->lineEditServerIP->text(),ui->lineEditServerPorts->text().toInt());
    if(tcpClient->waitForConnected(10000))
    {
        ui->buttonConnect->setEnabled(false);
        ui->buttonDisconnect->setEnabled(true);
        ui->buttonSendMessage->setEnabled(true);
        ui->textEditStatus->append("连接服务器成功!");
    }
    else
    {
        ui->textEditStatus->append("连接失败,请检查IP地址和端口!");
    }
}

4.断开与服务器的连接

//断开
void Client::on_buttonDisconnect_clicked()
{
    tcpClient->disconnectFromHost();
    //断开成功
    if (tcpClient->state() == QAbstractSocket::UnconnectedState || tcpClient->waitForDisconnected(1000))
    {
        ui->buttonConnect->setEnabled(true);
        ui->textEditStatus->append("连接已断开!");
        ui->buttonDisconnect->setEnabled(false);
        ui->buttonConnect->setEnabled(true);

    }
    else
    {
        ui->textEditStatus->append("无法断开与服务器的连接!");
    }
}

测试

1.都添加了代码,就开始测试是否可以连接,首先先启动服务器端,然后输入IP地址和端口,按一监听键,开始监听。
在这里插入图片描述
2.启动客户端,输入服务器的IP地址和端口,点连接按钮,开始连接到服务器。
在这里插入图片描述
3.当前客户端已经连接上客服器,那接下要做的事,如果让客户端往服务器发信息,或者服务器把信息返回给客户端,或者以广播的形式向所有连接到的客户端都发信息。

  • 16
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
以下是使用Qt制作TCP服务器客户端的基本步骤: 1. 创建Qt项目并添加网络模块 首先,在Qt Creator中创建一个新项目。在项目配置向导中,选择“Qt Widgets应用程序”模板。然后,打开.pro文件并添加以下行: ``` QT += network ``` 2. 创建TCP服务器Qt中,使用QTcpServer类来创建TCP服务器。在mainwindow.h文件中添加以下头文件: ``` #include <QTcpServer> ``` 然后,在MainWindow类中添加以下代码: ``` private: QTcpServer *server; ``` 在MainWindow类的构造函数中初始化server对象: ``` MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { server = new QTcpServer(this); connect(server, SIGNAL(newConnection()), this, SLOT(newConnection())); if(!server->listen(QHostAddress::Any, 1234)) { qDebug() << "Server could not start!"; } else { qDebug() << "Server started!"; } } ``` 这将创建一个TCP服务器,监听本地IP地址的1234端口。newConnection()函数是一个槽,当有新连接时会被调用。 在MainWindow类中添加newConnection()函数: ``` void MainWindow::newConnection() { QTcpSocket *socket = server->nextPendingConnection(); socket->write("Hello client!"); socket->flush(); socket->waitForBytesWritten(3000); socket->close(); } ``` 这个函数在有新连接时会被调用,然后向客户端发送一条消息并关闭连接。 3. 创建TCP客户端Qt中,使用QTcpSocket类来创建TCP客户端。在mainwindow.h文件中添加以下头文件: ``` #include <QTcpSocket> ``` 然后,在MainWindow类中添加以下代码: ``` private: QTcpSocket *socket; ``` 在MainWindow类的构造函数中初始化socket对象: ``` MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { socket = new QTcpSocket(this); connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead())); socket->connectToHost("127.0.0.1", 1234); } ``` 这将创建一个TCP客户端,并连接到本地IP地址的1234端口。readyRead()函数是一个槽,当有数据可读时会被调用。 在MainWindow类中添加readyRead()函数: ``` void MainWindow::readyRead() { QByteArray data = socket->readAll(); qDebug() << data; } ``` 这个函数在有数据可读时会被调用,并输出收到的数据。 这就是使用Qt制作TCP服务器客户端的基本步骤。可以根据实际需求对代码进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值