如何在 C++/QT 中使用 TCP 服务器套接字创建 Http 服务器

Posted

技术标签:

【中文标题】如何在 C++/QT 中使用 TCP 服务器套接字创建 Http 服务器【英文标题】:How to Create a Http Server with TCP Server Sockets in C++/QT 【发布时间】:2015-10-11 10:58:27 【问题描述】:

我想创建一个 Http 服务器来发送 MJPEG 流。因此,首先我想创建一个只发送一些 html/文本的简单版本。我已经设法设置了一个 TCP 服务器,但我不知道如何像 http 服务器一样“行动”。

我做了什么: 创建了一个 TCP 服务器。当客户端连接时,会创建一个 TCP-Socket。然后我实现了一个ReadyRead SLOT,它在浏览器向服务器发送“GET”请求时执行。

GET / HTTP/1.1 主机:127.0.0.1:8889 用户代理: Mozilla/5.0...

然后我运行以下代码

QByteArray header = "HTTP/ 1.1 200 OK\r\n";
m_Client->write(header);

QByteArray ContentType = "Content-Type: text/html\r\n";
m_Client->write(ContentType);

QByteArray Body = "Test";
m_Client->write(Body);

m_Client->close();

但我在浏览器中看到的是

HTTP/ 1.1 200 OK 内容类型:文本/html 测试

那我做错了什么?我考虑过接收客户端 GET 请求,发送 Header、Mimes 和返回的内容,然后关闭连接......这个方法是错误的还是只是我编码的方式?

【问题讨论】:

【参考方案1】:

/1.1 之间有一个额外的空格,并且在标头块和响应正文之间缺少一个空行。

【讨论】:

谢谢你的速度很快而且效果很好.....我几乎为它这么简单而感到羞耻;) 下次根据规格更仔细地检查您的输出,计算机并不能真正容忍通信协议中的错误。 =) 当然 ;) 我还为 MJPEG 部分创建了另一个问题。至于现在我只能发送静态图像。也许你可以再帮我一次;)***.com/questions/33064955/…

以上是关于如何在 C++/QT 中使用 TCP 服务器套接字创建 Http 服务器的主要内容,如果未能解决你的问题,请参考以下文章

QT tcp 编程 【在线等】

Qt学习第四天

使用 Qt 通过 TCP 套接字部分发送 xml 消息

通过 Qt tcp 套接字更改 Qt GUI?

在 Qt 中通过 TCP 传输大文件

QT/C++——网络编程