qt tcpプログラミング手順

12370 ワード

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      。