qt tcp编程步骤

tcp通信是qt开发中常用的通信方式,这里把项目中使用的过程记录一下备忘。

1.首先在.h文件中引用头文件

#include <QTcpSocket>
同样在头文件中定义一个socket变量:
private:
    QTcpSocket *tcpSocket;
声明槽函数,下面会用到
private slots:
    void HasConnected();
    void HasDisconnected();
    void error();
    void RecCmdData();

2.在cpp文件中初始化变量,并绑定函数:
 	tcpSocket = new QTcpSocket(this);
	//主要的四个函数绑定,这四个函数需要在头文件中声明一下
    connect(tcpSocket,SIGNAL(connected()),this,SLOT(HasConnected()));
    connect(tcpSocket,SIGNAL(disconnected()),this,SLOT(HasDisconnected()));
    connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(error()));
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(RecCmdData()));
3.函数实现:
//tcp连接函数,从界面获取ip和端口,用connecttohost函数发起连接
void Forward::on_Con_pushButton_clicked()
{
     proxima = true;
    tcpSocket->abort();
    ui->Sta_lineEdit->setText("正在连接...");
    ui->Sta_lineEdit->setStyleSheet("color:black");
    tcpSocket->connectToHost(ui->Ip_lineEdit->text(),ui->Por_lineEdit->text().toInt());
}
//连接成功函数
void Forward::HasConnected()
{      
          ui->Sta_lineEdit->setText("连接成功!");
          ui->Sta_lineEdit->setStyleSheet("color:black");
}
//断开连接
void Forward::HasDisconnected()
{
    ui->Sta_lineEdit->setText("连接已断开!");
    ui->Sta_lineEdit->setStyleSheet("color:red");
}
//连接失败
void Forward::error()
{
    ui->Sta_lineEdit->setText("连接失败!");
    ui->Sta_lineEdit->setStyleSheet("color:red");
}
//断开连接的按钮操作
void Forward::on_Cut_pushButton_clicked()
{
    //断开连接
    tcpSocket->abort();
}
 
//最后一个最关键的函数就是数据接收函数,当收到数据后会进入前面绑定的RecCmdData()函数
//任务接收数据
void Forward::RecCmdData()
{
    QFile rec_file("tmp/receive.txt");//收到的内容,包含12个字节的头
    QFile rec_xml("tmp/receive.xml");
    int cnt = 0;
    char *buffer;
    char *buffer_xml;
    if(!rec_file.open(QIODevice::ReadWrite | QIODevice::Truncate))
        return;
    if(!rec_xml.open(QIODevice::ReadWrite | QIODevice::Truncate))
        return;
    while(tcpSocket->bytesAvailable())
    {
        QByteArray vTemp;
        vTemp = tcpSocket->readAll();
        rec_file.write(vTemp);
        cnt = vTemp.count();
        buffer = vTemp.data();
        buffer_xml = buffer+12;
        char buff[cnt];
        for(int i=0;i<cnt;i++)
        {
            buff[i] = *(buffer_xml+i);
        }
	//上面的操作是从收到的数据中解析需要的内容,去掉12个字节头,有些繁琐,但是可以运行,数据保存在buffer_xml中
        
       vTemp = QByteArray(buff);
       rec_xml.write(vTemp);
    }
}
至此,一个简单的tcp通信就完成了。

 
 
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值