www.pudn.com > receive.rar > dialog.cpp


#include  
#include  
#include  
#include  
#include  
#include "dialog.h" 
 
 
Dialog::Dialog(QWidget *parent) 
    : QDialog(parent) 
{ 
     tcpSocket = new QTcpSocket(this); 
      
     serverLabel = new QLabel(QString::fromLocal8Bit("服务器ip:")); 
     ipInfoLabel = new QLabel(QString::fromLocal8Bit("服务器port:")); 
     sqlipLabel = new QLabel(QString::fromLocal8Bit("数据库ip:")); 
     databaseLabel = new QLabel(QString::fromLocal8Bit("数据库名:")); 
     sqluserLabel = new QLabel(QString::fromLocal8Bit("用户名:")); 
     sqlpassLabel = new QLabel(QString::fromLocal8Bit("数据库密码:")); 
     startdateLabel = new QLabel(QString::fromLocal8Bit("开始日期:")); 
     starttimeLabel = new QLabel(QString::fromLocal8Bit("开始时间:")); 
 
     ComboBox = new QComboBox; 
      
     ComboBox->addItem(tr("local")); 
     ComboBox->addItem(tr("center")); 
     ComboBox->addItem(tr("liantong")); 
     ComboBox->addItem(tr("yidong")); 
      
     ipInfoLineEdit = new QLineEdit(tr("hj")); 
     sqlipLineEdit = new QLineEdit(tr("hj")); 
     databaseLineEdit = new QLineEdit(tr("hj")); 
     sqluserLineEdit = new QLineEdit(tr("hj")); 
     sqlpassLineEdit = new QLineEdit(tr("hj")); 
     startdateLineEdit=new QLineEdit(QDate::currentDate().toString("yyyy.MM.dd")); 
     starttimeLineEdit=new QLineEdit(QTime::currentTime().toString("h:m:s")); 
 
     sqlpassLineEdit->setEchoMode(QLineEdit::Password); 
      
   //  hostLineEdit->setReadOnly(true); 
     ipInfoLineEdit->setReadOnly(true); 
     startdateLineEdit->setReadOnly(true); 
     starttimeLineEdit->setReadOnly(true); 
     //display.setReadOnly(true); 
 
     beginButton = new QPushButton(tr("Begin")); 
     beginButton->setDefault(true); 
     beginButton->setEnabled(true); 
 
     quitButton = new QPushButton(tr("Quit")); 
 
     buttonBox = new QDialogButtonBox; 
     buttonBox->addButton(beginButton, QDialogButtonBox::ActionRole); 
     buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole); 
 
     connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); 
     connect(beginButton,SIGNAL(clicked()), this, SLOT(begin())); 
     connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readFortune()));  
     
     QGridLayout *mainLayout = new QGridLayout; 
     
     mainLayout->addWidget(serverLabel, 0, 0); 
     mainLayout->addWidget(ComboBox, 0, 1); 
     mainLayout->addWidget(ipInfoLabel, 0, 2); 
     mainLayout->addWidget(ipInfoLineEdit, 0, 3); 
     mainLayout->addWidget(sqlipLabel, 1, 0); 
     mainLayout->addWidget(sqlipLineEdit, 1, 1); 
     mainLayout->addWidget(databaseLabel,1,2); 
     mainLayout->addWidget(databaseLineEdit,1,3); 
     mainLayout->addWidget(sqluserLabel,2,0); 
     mainLayout->addWidget(sqluserLineEdit,2,1); 
     mainLayout->addWidget(sqlpassLabel,2,2); 
     mainLayout->addWidget(sqlpassLineEdit,2,3); 
     mainLayout->addWidget(startdateLabel,3,0); 
     mainLayout->addWidget(startdateLineEdit,3,1); 
     mainLayout->addWidget(starttimeLabel,3,2); 
     mainLayout->addWidget(starttimeLineEdit,3,3); 
     mainLayout->addWidget(&display,4,0,20,4); 
     mainLayout->addWidget(buttonBox,24,0,1,4);  
      
     setLayout(mainLayout); 
     setWindowTitle(tr("Fortune Client-getdata")); 
    
} 
 
 
void Dialog::begin() 
{ 
  //创建日志文件夹 
  QString filepath; 
  QDir dir; 
  filepath = dir.currentPath(); 
 
  if(!filepath.contains("log_center_receive"))	 
   {	 
    dir.mkdir("log_center_receive"); 
    filepath += "/log_center_receive/"; 
    dir.setCurrent(filepath); 
   } 
	 
	//连接数据库,用户名和密码从界面上填入获得 
  db = QSqlDatabase::addDatabase("QSQLITE"); // 使用sqlserver数据库驱动     
  db.setDatabaseName("E:/sqlite/oracle.db"); // 之前建立的数据库名 
  //db.setUserName(username);       // 之前创建的用户名 
  //db.setPassword(password);     //用户的密码 
	if(!db.open()) 
	 { 
	   display.append("cannot open database.");    // 打开数据库失败,显示错误原因 
     display.append("Reason: " + db.lastError().databaseText()); 
	 } 
	 
	 
	getip();     //获得ip 
	 
	 
	tcpSocket->connectToHost(host,port); 
	if(tcpSocket->waitForConnected(3000)==false) 
    {   
      display.append("Failed to connect to the server!"); 
      return; 
    } 
	   
	   
	  //和服务器交互信息 
  QByteArray block("IamOracleW"); //请求数据包格式 
	tcpSocket->write(block); 
  if(tcpSocket->waitForBytesWritten()==false) 
   {    
        display.append("Failed to send the information to the server!"); 
        return; 
   } 
    
	 display.append("The client is working now!"); 
	} 
 
void Dialog::getip() 
   { 
    QSqlQuery queryip; 
    QSqlError errorip; 
    queryip.prepare("select * from ipInfo where servername=:name "); 
    queryip.bindValue(":name",ComboBox->currentText());   
    if(queryip.exec()) 
      { 
       queryip.first(); 
       //对port和host赋值 
       port=queryip.value(2).toInt(); 
       host=queryip.value(1).toString(); 
       ipInfoLineEdit->setText(host+" "+queryip.value(2).toString()); 
     } 
     else 
       { 
         //如果查询失败,显示错误 
        errorip= queryip.lastError();  
        display.append("From sqlite database,the ipInfo table: " + errorip.databaseText()); 
       } 
     
     
   } 
 
void Dialog::readFortune() 
	{ 
	 
	QByteArray tempArray[5]; 
     
    QByteArray temp=tcpSocket->readAll();  
	if(temp.size()==0) 
	{ 
		display.append("error");  
	} 
    QByteArray type=temp.mid(9,6); 
    display.append(temp); 
    if(type=="211001") 
     { 
       writeData(temp.left(100));       //长度未知???? 
     } 
    else 
    { 
      int i,leng[5],j=0; 
      for(i=0;i<5;i++) 
       { 
        leng[i]=temp.mid((temp.size()-20+i*4),4).toInt();    //格式:socket号+数据   
        tempArray[i]=temp.mid(j,leng[i]); 
        j=j+leng[i]; 
     	  if(leng[i]!=0) 
     	  	{ 
     	      writeData(tempArray[i]); 
     	    } 
       } 
    }  
    display.append("write");   
	  tcpSocket->write("OracleWReady"); //返回确认信息 
    if(tcpSocket->waitForBytesWritten()==false) 
     {    
        display.append("Failed to send the ACK to the server!"); 
        return; 
     } 
      
	} 
 
 void Dialog::writeData(QByteArray temparray) 
  {  
    QByteArray socketnum;      
    QByteArray data; 
    display.append(temparray); 
   	socketnum=temparray.left(5);  
    data=temparray.right(temparray.size()-5);     //未取年份 
  
    QSqlQuery query; 
    QSqlError error; 
    query.prepare("insert into oracle(packet,socketnum) values (:pa,:socket)"); 
    query.bindValue(":pa",(QString)data); 
    query.bindValue(":socket",(QString)socketnum); 
    if(!query.exec()) 
      { 
        //如果查询失败,返回错误信息 
        error = query.lastError();  
        QString temp="From oracle database,the oracle table: "+ error.databaseText();  
        display.append(temp); 
         
        QString fortune="Not insert sucesfully"+QString::fromLocal8Bit(data+socketnum)+QTime::currentTime().toString("HH:mm:ss"); 
        QFile file(fortune); 
        file.open(QIODevice::WriteOnly); 
        QTextStream log(&file);  
        log <<(data+socketnum)<<"\n"; 
      } 
         
   }