qt tcpプログラミング手順
12370 ワード
tcp通信はqt開発でよく使われる通信方式であり,ここではプロジェクトで使用されるプロセスをメモする.
1.まず.hファイルでヘッダファイルを参照する
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()));
3.関数実装:connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(RecCmdData()));
//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 。