1

我是 QT 编程的新手。现在我有一个项目,它将数据从 Android 手机传输到运行 QT 套接字服务器的本地计算机。我的问题是我知道如何序列化一个对象并将其从 Android 手机发送出去,但我不知道如何在 QT 端接收它。任何帮助对我来说都会很棒,谢谢!

部分代码如下: Android代码:

public void SendDataToNetwork(Infor std_infor) throws IOException { //You run this from the main thread.

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(std_infor);
oos.close();
byte[] bytes = baos.toByteArray();
try {
if (nsocket.isConnected()) {
nos.write(bytes);
} else {
Log.i("AsyncTask", "SendDataToNetwork: Cannot send message. Socket is closed");
}
} catch (Exception e) {
Log.i("AsyncTask", "SendDataToNetwork: Message send failed. Caught an exception");
}
}
}

std_infor 是一个对象,其中有四个字符串变量。

Qt 服务器:

void MainWindow::startRead()
{
char* rec = new char[client->readBufferSize()];
qDebug()<<client->readBufferSize();
QByteArray data = client->readAll();
qDebug()<<data;
}
4

2 回答 2

1

我在我的项目中做了同样的事情,在 Qt 应用程序和浏览器扩展(Firefox 和 Chrome 扩展)之间传输对象。以下是系统的工作原理:

在 Qt End:我使用一个名为QHttpServer的开源项目来实现一个 Http Server 并监听一个预定义的端口。在开始真正的工作之前,您还可以查看A simple HTTP Server以了解 QTcpServer 的工作原理。

在扩展中,我使用 XmlHttpRequest 向该预定义端口发送和接收消息(您应该加密/解密消息以确保安全)。XHR 很简单,AFAIK Android 也支持它。

另外,我建议使用 JSON 来序列化/反序列化您的对象。

如果您需要更多详细信息,可以搜索“Qt Http Server”。

于 2013-07-21T02:23:41.467 回答
0

首先不要将 try 和其他异常处理程序与 Qt 结合使用。

我不确定你想做什么,但你可能正在寻找类似QDataStream的东西。结合QByteArray,您可以创建一个数据包,您可以将其发送给您的客户端或服务器。

发件人:

QByteArray buffer;
QDataStream out(&buffer);
out << someData << someMoreData;

接收者:

QByteArray buffer;
QDataStream in(&buffer);
in >> someData >> someMoreData;
于 2013-07-20T20:31:21.480 回答