void MainWindow::onSocketReadyRead(int i) { if(this->isfrist[i]==false) { //获取连接账号 QString account = tcpSocket[i]->readLine(); //写入数据库 qDebug()<<"写入数据库"; sqconn.update(account,QString::number(tcpSocket[i]->peerPort())); this->isfrist[i]=true; } else { while(tcpSocket[i]->canReadLine()) { qDebug()<<"tcpSocket[i]->canReadLine()"; //获取内容 QString data = tcpSocket[i]->readLine(); //data.mid(0,8);为到达方 data.mid(8,8);为发送方 //遍历列表ip是否登录 //遍历数据库查询该帐户 QString account = data.mid(0,8); qDebug()<<"目标帐户为:"<<account; //通过该帐户找到ip地址,然后发送信息 QString port = sqconn.AccountIP(account); //查询数据库 for(int i =0;i<this->tcpSocket.length();i++) { if(QString::number(tcpSocket[i]->peerPort())==port)//说明在线 { //将数据转发给到达方,并保留发送方帐户,用于窗口识别 QByteArray str = data.mid(8).toUtf8(); tcpSocket[i]->write(str); qDebug()<<"目标端口号:"<<tcpSocket[i]->peerPort(); } } } } } 将以上代码中的数据库操作改成文件操作,即把应该保存的数据保存到指定文件中,对文件进行添加,查找,删除等操作
时间: 2024-04-14 18:29:20 浏览: 104
以下是将数据库操作改成文件操作的代码示例:
```cpp
#include <QFile>
#include <QTextStream>
void MainWindow::onSocketReadyRead(int i)
{
if (this->isfrist[i] == false)
{
// 获取连接账号
QString account = tcpSocket[i]->readLine();
// 写入文件
qDebug() << "写入文件";
saveToFile(account, QString::number(tcpSocket[i]->peerPort()));
this->isfrist[i] = true;
}
else
{
while (tcpSocket[i]->canReadLine())
{
qDebug() << "tcpSocket[i]->canReadLine()";
// 获取内容
QString data = tcpSocket[i]->readLine();
// data.mid(0,8);为到达方 data.mid(8,8);为发送方
// 遍历列表ip是否登录
// 遍历文件查询该帐户
QString account = data.mid(0, 8);
qDebug() << "目标帐户为:" << account;
// 通过该帐户找到ip地址,然后发送信息
QString port = getAccountIP(account); // 查询文件
for (int i = 0; i < this->tcpSocket.length(); i++)
{
if (QString::number(tcpSocket[i]->peerPort()) == port) // 说明在线
{
// 将数据转发给到达方,并保留发送方帐户,用于窗口识别
QByteArray str = data.mid(8).toUtf8();
tcpSocket[i]->write(str);
qDebug() << "目标端口号:" << tcpSocket[i]->peerPort();
}
}
}
}
}
void MainWindow::saveToFile(const QString& account, const QString& port)
{
QFile file("data.txt");
if (file.open(QIODevice::Append | QIODevice::Text))
{
QTextStream out(&file);
out << account << " " << port << endl;
file.close();
}
}
QString MainWindow::getAccountIP(const QString& account)
{
QFile file("data.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream in(&file);
while (!in.atEnd())
{
QString line = in.readLine();
QStringList parts = line.split(" ");
if (parts.length() == 2 && parts[0] == account)
{
file.close();
return parts[1];
}
}
file.close();
}
return ""; // 未找到对应账户的IP地址
}
```
在上述代码中,使用`QFile`和`QTextStream`来进行文件操作。`saveToFile`函数将账号和端口号保存到文件中,`getAccountIP`函数根据账号从文件中查询对应的IP地址。请根据实际需求修改文件名和文件路径。
阅读全文