2013-07-20 43 views
1

我是QT編程的新手。現在我有一個項目可以將數據從Android手機傳輸到本地計算機並運行QT套接字服務器。我的問題是我知道如何序列化一個對象並從Android手機發送出去,但我不知道如何在QT端接收它。任何幫助對我都很好,謝謝!代碼的如何在Android和QT之間使用TCP套接字傳輸對象?

部分列出如下: 的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; 
} 
+0

您需要使用類似JSON或XML的序列化和反序列化對象;它有可能在字節級或者細長級上工作。 – 323go

回答

0

先不使用嘗試使用Qt組合和其他異常處理程序。

我不確定你想要做什麼,但你可能正在尋找類似QDataStream的東西。結合QByteArray,您可以創建一個數據包,您可以將其發送給客戶端或服務器。

發件人:

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

接收機:

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

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

在Qt結束:我使用一個名爲QHttpServer的開源項目來實現Http服務器並偵聽預定義的端口。您也可以檢查A simple HTTP Server以瞭解QTcpServer在開始真正的工作之前的工作方式。

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

此外,我建議使用JSON序列化/反序列化您的對象。

如果你需要更多的細節,你可以谷歌「Qt Http服務器」。

+1

感謝您的提示!問題解決了。 – user2582234

相關問題