Qt 服务器通信类:Procession - 使用 TCP Socket 连接服务器并发送和接收数据
#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; if (m_socket->write(block) == -1) { ui->message->append('发送userid失败'); m_socket->close(); } }
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; if (!(in >> suggestion)) { ui->message->append('解析服务器返回的数据失败'); return; } ui->message->append(suggestion); m_socket->close(); }
原文地址: http://www.cveoy.top/t/topic/fCbk 著作权归作者所有。请勿转载和采集!