我試圖通過套接字在Qt服務器中發送圖像上載,並在使用Java創建的客戶機中將其可視化。到目前爲止,我只是通過傳輸字符串來雙方進行通信,並嘗試了不同的示例來發送圖像,但沒有任何結果。使用qt通過套接字發送圖像並使用java讀取它
我用於將圖像中的QT傳輸的代碼是:
QImage image;
image.load("../punton.png");
qDebug()<<"Image loaded";
QByteArray ban; // Construct a QByteArray object
QBuffer buffer(&ban); // Construct a QBuffer object using the QbyteArray
image.save(&buffer, "PNG"); // Save the QImage data into the QBuffer
socket->write(ban);
在另一端的代碼在Java中讀的是:
BufferedInputStream in = new BufferedInputStream(socket.getInputStream(),1);
File f = new File("C:\\Users\\CLOUDMOTO\\Desktop\\JAVA\\image.png");
System.out.println("Receiving...");
FileOutputStream fout = new FileOutputStream(f);
byte[] by = new byte[1];
for(int len; (len = in.read(by)) > 0;){
fout.write(by, 0, len);
System.out.println("Done!");
}
在Java中的方法卡住,直到我關閉Qt服務器,之後生成的文件已損壞。
我會很感激任何幫助,因爲這對我來說是必要的,我也是新手來使用這兩種語言進行編程。
此外,我用了以下命令,並且接收過程現在結束並顯示一條消息,但該文件已損壞。
socket->write(ban+"-1");
socket->close(); in qt.
而且在Java:
System.out.println(by);
String received = new String(by, 0, by.length, "ISO8859_1");
System.out.println(received);
System.out.println("Done!");
你在循環之後在FileOutputStream上調用'close'嗎? –
嘗試在寫入數據後刷新Qt服務器中的套接字流。另外,爲什麼你的緩衝區只有1個字節大小? – Vulcan
它應該是什麼大小它是我的圖像是1x1像素和使用命令image.size()是105.我也嘗試過socket-> write(ban);插座 - >沖洗(); socket-> waitForBytesWritten(10000);另外我已經嘗試了不同的字節大小,並且該進程總是在java中的循環中搜索。 – user1764246