续:如何使用QT制作简易的Mobus TCP(Client)工具-第二期

三、设计TCP Client界面

这里我们可以使用Qt的Ui界面去设计,通过拖动控件放置窗口内。首先,我们需要先思考,作为TCP Client,需要填写些什么才能连上TCP Server呢?我想到的有:(1)远端IP,也就是作为TCP Server的设备的IP;(2)远端端口,也就是作为TCP Server的设备所暴露出来的端口号;(3)一个连接的按钮和一个清除显示的按钮。(4)一个能显示接收内容的文本显示框;(5)选择文本显示的数据格式,既然都说了是支持Modbus TCP协议的,那必不能少了选择显示的数据格式;如果想做高级点的,还可以加一个可选择“换行显示”的控件。既然都思考清楚了,那就开干吧!

3.1 放置控件

1.双击选择工程中的“tcp client.ui”,如图1所示

图1

2.先大致设计控件的布局,可根据自己的喜好设置,如图2所示

图2

3.将对应的控件,放置对应的位置。根据个人喜好设置,如图3所示

图3

4.修改控件的名字,如图4所示,右侧的控件命名不能带空格,中文;格式根据自己喜好设置,能看懂表达的意思就行。

图4

5.运行下,看看效果;如图5所示

图5

3.2 编写代码

注意:使用QT的网络套接字需要.pro文件中加入一句:

QT       += network

捋一下逻辑:使用QT中的QTcpSocket类与服务器进行通信需要以下5步:

(1)创建QTcpSocket套接字对象

(2)使用这个对象连接服务器

(3)当socket接收缓冲区有新数据到来时,会发出readRead()信号,因此为该信号添加槽函数以读取数据

(4)使用write函数向服务器发送数据

(5)断开与服务器的连接

OK,开干吧!

3.2.1 创建QTcpSocket套接字对象

千万别忘了在.h文件里面加这两句哦,不然要报错了!!!

3.2.2 使用这个对象连接服务器

tcp_client.cpp文件的部分代码,以下主要是通过点击连接按钮实现与TCP Server的连接与断开连接,代码中也有清晰的注释。

#include "tcp_client.h"
#include "ui_tcp_client.h"

TCP_Client::TCP_Client(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::TCP_Client)
{
    ui->setupUi(this);
   //创建Socket对象
   socket =new QTcpSocket();

   //使能按键
   ui -> Socket_Connect -> setEnabled(true);
   //设置默认显示的远端IP
   ui -> Remote_IP -> setText("192.168.0.23");
   //设置默认显示的远端端口号
   ui ->Remote_port ->setText("7890");
}

TCP_Client::~TCP_Client()
{
    delete ui;
    delete this ->socket;
}

//通过“连接”按钮控制与TCP Server的连接
void TCP_Client::on_Socket_Connect_clicked()
{
    //判断pushbottom的状态
    if(ui ->Socket_Connect ->text() == tr("连接"))
    {
        //定义两个变量,用来获取IP和端口号
        QString remote_ip;
        int remote_port;
        //获取远端IP
        remote_ip = ui -> Remote_IP -> text();
        //获取远端端口号
        remote_port = ui -> Remote_port -> text().toInt();

        //取消已有的连接
        socket -> abort();

        //连接服务端
        socket -> connectToHost(remote_ip,remote_port);
        //等待连接成功
        if(!socket ->waitForConnected(3000))
        {
            qDebug() << "连接失败";
            return;
        }
        qDebug() << "连接成功";

        //发送按键使能
        ui -> Socket_Connect -> setEnabled(true);
        //修改按键显示的文字
        ui ->Socket_Connect -> setText("断开连接");
    }
    else
    {
        //断开连接
        socket ->disconnectFromHost();
        //发送按键使能
        ui -> Socket_Connect -> setEnabled(true);
        //修改按键显示的文字
        ui ->Socket_Connect -> setText("连接");
    }
}
可以打开一个网络调试助手,测试是否能连接上,该部分代码运行后的效果如下图所示:

3.2.3 读取接收数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值