QT开发中文网

根据协议$sReceived = MyTCP_Client($ip,"2074",Binary("0xCD")&Binary($name_len)&Binary($name)&Binary($content_len)&Binary($sFileRead)&Binary("0xDC"),1)这样写函数正确吗?void upload_program::on_toolBtn_upload_clicked

这个函数有一些错误。下面是修正后的代码:

void upload_program::on_toolBtn_upload_clicked() {

// 获得文件名
QString file_path = ui->edit_path->text();
int index = file_path.lastIndexOf("/");
QString file_name = file_path.mid(index + 1);

// 连接服务器
QTcpSocket* socket = new QTcpSocket(this);
socket->connectToHost("192.168.234.100", 2074);
if (!socket->waitForConnected()) {
    qDebug() << "Failed to connect to server:" << socket->errorString();
    return;
}

// 读取文件内容
QFile file(file_path);
if (!file.open(QIODevice::ReadOnly)) {
    qDebug() << "Failed to open file";
    return;
}
QByteArray file_content = file.readAll();
qint64 content_len = file_content.size();
file.close();

// 构造数据包
QByteArray packet;
packet.append(char(0xCD)); // 文件传输协议类型
packet.append(qint32(file_name.toUtf8().size())); // 文件名长度
packet.append(file_name.toUtf8()); // 文件名
packet.append(qint64(content_len)); // 文件内容长度
packet.append(file_content); // 文件内容
packet.append(char(0xDC)); // 传输结束

// 发送数据包并接收响应
QByteArray received_data;
if (socket->waitForConnected()) {
	socket->write(packet);
	if (socket->waitForReadyRead()) {
		received_data = socket->readAll();
	}
	else {
		qDebug() << "Failed to receive response";
	}
}
else {
	qDebug() << "Failed to send packet";
}

// 关闭连接
socket->close();

}

注意:在发送数据包后,应该等待服务器的响应。这里使用了waitForReadyRead()函数来等待响应,如果超时或者出错则会返回false。此外,在使用QFile读取文件内容后,需要用file.close()关闭文件句柄。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1920

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?