2016-02-25 172 views
0

我試圖模擬使用TCP連接+ HTTP標頭的http請求。 我使用VLC播放器測試它。我使用QT來開發我的應用程序。正常HTTP請求與TCP連接+ HTTP標頭

所以,基本上我開始在VLC播放器中流媒體視頻到主機http://192.168.0.100:55555。然後在代碼中,我嘗試通過http GET請求連接到服務器,該請求成功。

我想代替http請求通過TCP連接到http://192.168.0.100:55555並使用相同的套接字發送純文本GET請求作爲文本,但我得到QAbstractSocket::ConnectionRefusedError

QTcpSocket* socket = new QTcpSocket(); 
socket->connectToHost(m_session->remoteHost().address, m_session->remoteHost().port); 
// Then I get QAbstractSocket::ConnectionRefusedError in a slot 
// connected to error() signal 

我不知道是否有可能這樣做,如果您有任何建議。

謝謝

回答

0

爲什麼不把代碼從Http download example

//... 
    reply = qnam.get(QNetworkRequest(url)); 
//... 
    connect(reply, SIGNAL(readyRead()), 
     this, SLOT(httpReadyRead())); 
//.... 
void HttpWindow::httpReadyRead() 
{ 
    // this slot gets called every time the QNetworkReply has new data. 
    // We read all of its new data and write it into the file. 
    // That way we use less RAM than when reading it at the finished() 
    // signal of the QNetworkReply 
    if (file) 
     file->write(reply->readAll()); 
} 
+0

謝謝你的回答,但那不是我想要的。我知道如何使用qt網絡類。我有一個特殊協議的設備,我需要以特殊方式發送請求和數據。 Qt似乎沒有提供這個功能。我需要重新使用http連接使用的同一個端口,將原始數據發送到服務器。這不是我需要的郵寄請求。唯一可以工作(但不是)的是sendCustomRequest,但是作爲第三個參數放置的QIODevice從不讀取。我還沒有看到使用sendCustomRequest的單個工作示例。 – rightaway717

+0

然後,你可能會在TCP和HTTP的頂部使用自定義協議。我這樣說是因爲重新實現HTTP並不是一個好主意,因爲您將慢慢需要重新實現在開發應用程序時發現的小方面。最有可能的是,你會執行它們錯誤和/或錯誤(你看過[rfc](https://www.w3.org/Protocols/rfc2616/rfc2616.html)?)。但有一件事,你可以使用[QHttpHeader](http://doc.qt.io/qt-4.8/qhttpheader.html#toString)以字符串的形式獲取std頭。 –

+0

我不打算重新實現HTTP。我有一個具體的任務,一旦我找到了如何重用相同的tcp連接來發送二進制數據到服務器,即被http GET請求使用,這個任務就會被完成。這就對了。聽起來很簡單,不是嗎?這就是設備開發人員如何實現它,我無法改變它。所以我期待一個答案,比如「你沒辦法做到這一點」,或者解釋爲什麼我沒有做到這一點,以及如何解決它。不過謝謝你'QHttpHeader',不知道它。 – rightaway717