python - 在 python 中从服务器发送一些行到 QT(C++) 客户端
问题描述
Ia 在我的 Raspberry Pi 和 QT (C++) 中的 Android 应用程序上有 Python 中的 serwer。我想将一些数据(行)从我的服务器(来自 csv 文件)发送到客户端应用程序并将其保存在 QListWidget 中。客户端可以通过蓝牙或 TCP 连接(我在 RPi 上创建了 2 个服务器)。
我试图在循环中逐行发送,因为我不知道是否有任何方法可以发送整个列表或类似的东西。我在 Python 中阅读过有关 pickle 的信息,但我不知道是否可以在 QT 中阅读此内容。
QT客户:
if(typ=="BT") line = sBT->readLine();
if(typ=="TCP") line = sTCP->readLine();
line = line.trimmed();
while(line!="koniec")
{
ui->wflista->addItem(line);
if(typ=="BT") line = sBT->readLine();
if(typ=="TCP") line = sTCP->readLine();
line = line.trimmed();
}
Python中的服务器:
if(data=="logi"):
globalvar.conn.send("logi\n")
print("Klient pyta o logi")
with open('/home/pi/Projekt/log.csv', 'rb') as logi:
csvreader = csv.reader(logi, delimiter=' ', quotechar='|')
for row in csvreader:
globalvar.conn.send(' - '.join(row)+"\n")
print('-'.join(row) +"\n")
globalvar.conn.send("koniec")
print("Wyslalem wszystko")
我想从 RPi 上的文件中获取行到我的 QListWidget (wflista),但不幸的是出了点问题。
尝试执行此操作时,服务器会显示 csv 文件中的每一行和“Wysłałem wszystko”,因此它结束了循环。在客户端 QListWidget 是空的并且卡住了。我认为它处于无限循环中,因为它无法读取“koniec”(while 循环的参数。
如果我将这个论点从“koniec”更改为“”,它有时什么也不做,有时会得到应有的线条,或者有时只得到它的一部分而部分丢失。
在这种情况下我该怎么办?
解决方案
你能在 C++ 端尝试这样的事情,看看会发生什么吗?(这将代替您在问题中发布的整个 C++ 示例块。)
QIODevice *sock = (typ == "BT" ? qobject_cast<QIODevice*>(sBT) : qobject_cast<QIODevice*>(sTCP));
while (sock->canReadLine()) {
line = sock->readLine();
line = line.trimmed();
ui->wflista->addItem(line);
}
PS我假设这部分是由来自套接字的信号触发的,比如readyRead()
,或者放在waitForReadyRead()
.
添加:调试代码:
QIODevice *sock = (typ == "BT" ? qobject_cast<QIODevice*>(sBT) : qobject_cast<QIODevice*>(sTCP));
while (sock->bytesAvailable()) {
const QByteArray data = sock->readAll();
qDebug() << data << '\n' << data.toHex(':');
}
推荐阅读
- java - Java fizzBuzz(来自 CodingBat-Array2 的练习)
- tkinter - 如何从 Combobox 获取值以写入文本框
- php - 选择框数据数组
- javascript - 承诺即使在解决后仍处于未决状态
- python - 使用 torch.save 和 torch.load 继续培训 - 关键错误消息
- ios - 如何使用 for 循环通过 BLE 发送数据
- ios - 如何使用“XCODE”中的 Storyboard UI 对标题文本设置约束,使其大小相对于超级视图的大小?
- r - 无法在 Windows 10 上加载 rjag
- javascript - 在纯 css 中从左到右显示文本的效果
- ruby-on-rails - 是否可以在 Rails 6 中使用 .js.erb 文件?