QTcpSocket实现与服务器通信
#include 'procession.h'
#include 'ui_procession.h'
Procession::Procession(int userid,QWidget *parent) :
QWidget(parent),
ui(new Ui::Procession),
userid(userid)
{
ui->setupUi(this);
processionWidget();
m_socket = new QTcpSocket(this);
connect(ui->connectBtn, &QPushButton::clicked, this, &Procession::on_pushButton_clicked);
connect(m_socket, &QTcpSocket::readyRead, this, &Procession::readyRead);
connect(m_socket, &QTcpSocket::connected, this, &Procession::connected);
connect(m_socket, &QTcpSocket::disconnected,this,&Procession::disconnected);
}
Procession::~Procession()
{
delete ui;
}
void Procession::processionWidget()
{
setWindowTitle('服务器通信');
setAutoFillBackground(true);
QPalette palette=this->palette();
QPixmap pixmap(':user/image/image/net.jpg');
palette.setBrush(QPalette::Window, QBrush(pixmap));
setPalette(palette);
setFixedSize(600,400);
}
void Procession::on_pushButton_clicked()
{
if (m_socket->state() == QAbstractSocket::ConnectedState) {
ui->message->append('已经连接上服务器');
return;
}
QString ip = ui->IP->text();
QString port = ui->port->text();
if (ip.isEmpty() || port.isEmpty()) {
ui->message->clear();
ui->message->append('请输入有效的IP地址和端口号');
return;
}
ui->message->clear();
ui->message->append('正在连接中...');
m_socket->connectToHost(ip, static_cast<quint16>(ui->port->text().toInt()));
}
void Procession::connected()
{
ui->message->append('连接成功');
// 发送userid给服务器
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out << this->userid;
qint64 bytesWritten = m_socket->write(block);
if (bytesWritten != block.size()) {
// 处理发送数据失败的情况
ui->message->append('发送数据失败');
return;
}
}
void Procession::disconnected()
{
ui->message->append('连接已断开');
m_socket->close();
}
void Procession::readyRead()
{
QByteArray data = m_socket->readAll();
if (data.isEmpty()) {
ui->message->append('读取的数据为空');
return;
}
// 解析服务器返回的数据
QDataStream in(&data, QIODevice::ReadOnly);
QString suggestion;
in >> suggestion;
if (in.status() == QDataStream::Ok) {
ui->message->append(suggestion);
} else {
// 处理解析数据失败的情况
ui->message->append('解析数据失败');
}
}
原文地址: http://www.cveoy.top/t/topic/fCbj 著作权归作者所有。请勿转载和采集!