qt tcp编程步骤

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

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

#include 
同样在头文件中定义一个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 
  
        {
            buff[i] = *(buffer_xml+i);
        }
	//上面的操作是从收到的数据中解析需要的内容,去掉12个字节头,有些繁琐,但是可以运行,数据保存在buffer_xml中
        
       vTemp = QByteArray(buff);
       rec_xml.write(vTemp);
    }
}
 
  
至此,一个简单的tcp通信就完成了。

 
  
 
  
 
  

你可能感兴趣的:(qt tcp编程步骤)