php qt socket 通讯,qt socket tcp通信_最精简示例

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include

#include

#include

#include

#include

#include

#include

#include "comm.h"

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

/*

QFont font("Courier New [Cronyx]", 10);

ui->textEdit_Recv->setFont(font);

ui->textEdit_Send->setFont(font);

*/

tcpSocket = new QTcpSocket( this );

ui->lineEdit_IP->setText("192.168.14.23");

ui->lineEdit_Port->setText("5084");

ui->textEdit_Send->setText("Hello World!");

connect( tcpSocket, SIGNAL(error(int)), this, SLOT(errMsg(int)) );

connect( ui->pushButton_Send, SIGNAL(clicked()), this, SLOT(on_pushButton_Send_clicked(bool)) );

connect( ui->pushButton_Connect, SIGNAL(clicked()), this, SLOT(on_pushButton_Connect_clicked(bool)) );

connect( tcpSocket, SIGNAL(readyRead()), this, SLOT(recvMsg()) );

QStatusBar* bar = ui->statusBar;          //获取状态栏

fstLabel = new QLabel;                    //新建标签

fstLabel->setMinimumSize(150,20);         //设置标签最小尺寸

fstLabel->setFrameShape(QFrame::Panel);   //设置标签形状

fstLabel->setFrameShadow(QFrame::Sunken); //设置标签阴影

secLabel = new QLabel;

secLabel->setFrameShape(QFrame::Panel);

secLabel->setFrameShadow(QFrame::Sunken);

secLabel->setText(tr("关于作者"));

secLabel->setToolTip(tr("作者邮箱"));

secLabel->setStatusTip(tr("Email:camel.shoko@gmail.com"));

secLabel->setOpenExternalLinks(true);

fstLabel->setText(tr("状态信息"));

bar->addPermanentWidget(fstLabel);

bar->addPermanentWidget(secLabel);

ui->pushButton_Connect->setEnabled(true);

ui->pushButton_Close->setEnabled(false);

ui->pushButton_Send->setEnabled(false);

}

MainWindow::~MainWindow()

{

delete ui;

}

void MainWindow::recvMsg()

{

QString new_data;

QByteArray old_data;

old_data += tcpSocket->readAll();

ui->textEdit_Recv->moveCursor(QTextCursor::End);

if(ui->checkBox_DHex->isChecked())

{

new_data = BgComm::ByteArrayToHexString(old_data);

}

else

{

new_data = QString(old_data);

}

ui->textEdit_Recv->insertHtml(new_data);

if(ui->checkBox_Newline->isChecked())

{

ui->textEdit_Recv->insertPlainText("\n");

}

fstLabel->setText(tr("接收成功"));

}

void MainWindow::errMsg( int errNo )

{

qWarning( "this is err %d!", errNo );

fstLabel->setText(tr("连接错误"));

}

QByteArray MainWindow::Send_Check(QString tmp, bool hex)

{

QByteArray ret;

if(hex)

{

bool ok;

ret = BgComm::HexStringToByteArray(tmp, &ok);

if(!ok)

{

ret = 0;

QMessageBox::critical(this, tr("错误"), tr("请输入合适的数据,各个数据之间用空格分开。"));

}

}

else

{

ret = tmp.toLatin1();

}

return ret;

}

void MainWindow::on_pushButton_Send_clicked()

{

QTextStream out(tcpSocket);

QString context = ui->textEdit_Send->toPlainText();

if(!SocketStatus || context.isEmpty())

{

return;

}

QByteArray tmp = Send_Check(context,ui->checkBox_SHex->isChecked());

out << tmp << endl;

fstLabel->setText(tr("发送成功"));

}

void MainWindow::on_pushButton_Connect_clicked()

{

QString port;

int port_Int;

port = ui->lineEdit_Port->text();

port_Int = port.toInt();

tcpSocket->connectToHost(QHostAddress(ui->lineEdit_IP->text()), port_Int);

if (!tcpSocket->waitForConnected(2))

{

tcpSocket->disconnectFromHost();

return;

}

SocketStatus = true;

ui->pushButton_Connect->setEnabled(false);

ui->pushButton_Close->setEnabled(true);

ui->pushButton_Send->setEnabled(true);

fstLabel->setText(tr("连接成功"));

}

void MainWindow::on_pushButton_Clear_clicked()

{

ui->textEdit_Recv->clear();

fstLabel->setText(tr("清除接收区"));

}

void MainWindow::on_pushButton_Close_clicked()

{

tcpSocket->disconnectFromHost();

SocketStatus = false;

ui->pushButton_Connect->setEnabled(true);

ui->pushButton_Close->setEnabled(false);

ui->pushButton_Send->setEnabled(false);

fstLabel->setText(tr("关闭连接"));

}

void MainWindow::on_checkBox_DHex_stateChanged(int state)

{

QString text = ui->textEdit_Recv->toPlainText();

bool ok;

if(text.isEmpty())

{

return;

}

if(state == Qt::Checked)

{

ui->textEdit_Recv->setPlainText(BgComm::ByteArrayToHexString(text.toLatin1()));

}

else if(state == Qt::Unchecked)

{

ui->textEdit_Recv->setPlainText(BgComm::HexStringToByteArray(text, &ok));

}

changeTextEditTrans();

}

void MainWindow::changeTextEditTrans()

{

QString tmp = ui->textEdit_Recv->toHtml();

if(tmp.isEmpty())

{

return;

}

ui->textEdit_Recv->setText(tmp);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值