2016-02-25 170 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