簡體   English   中英

如何在Android和QT之間使用TCP套接字傳輸對象?

[英]How to transfer object using TCP socket between Android and QT?

我是QT編程的新手。 現在我有一個項目,它將在運行QT套接字服務器的情況下將數據從Android手機傳輸到本地計算機。 我的問題是我知道如何序列化對象並將其從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;
}

我在項目中做了同樣的事情,即在Qt應用程序和瀏覽器擴展(Firefox和Chrome擴展)之間傳輸對象。 這是系統的工作方式:

在Qt End:我使用一個名為QHttpServer的開源項目來實現Http Server並偵聽預定義的端口。 您還可以檢查A簡單的HTTP服務器,以了解QTcpServer的工作原理,然后再進行實際工作。

在擴展程序中,我使用XmlHttpRequest向該預定義端口發送和接收消息(為了安全起見,您應該加密/解密消息)。 XHR很簡單,並且AFAIK Android也支持它。

另外,我建議使用JSON對對象進行序列化/反序列化。

如果您需要更多詳細信息,可以在Google“ Qt Http Server”中進行搜索。

首先,不要將try和其他異常處理程序與Qt結合使用。

我不確定您要做什么,但您可能正在搜索QDataStream之類的東西。 QByteArray結合使用,可以創建一個數據包,可以將其發送給客戶端或服務器。

發件人:

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

接收器:

QByteArray buffer;
QDataStream in(&buffer);
in >> someData >> someMoreData;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM