我以为我已经想通了,但是现在我正在编写一个网络服务器,有些地方不太正常。

应用程序在端口上监听传入请求,当它收到请求时,它会读取所有内容,直到序列“\r\n\r\n”。 (因为这表示标题的结尾 - 是的,我忽略了可能的 POST 数据。)

现在,在读取到那么远之后,它将响应写入套接字:

HTTP/1.1 200 OK\r\n
Host: 127.0.0.1\r\n
Content-type: text/html\r\n
Content-length: 6\r\n
\r\n
Hello!

但是,当 Firefox 或 Chrome 尝试查看该页面时,它不会显示。 Chrome 通知我:



我究竟做错了什么?

这是一些代码:
QTcpSocket * pSocket = m_server->nextPendingConnection();

// Loop thru the request until \r\n\r\n is found
while(pSocket->waitForReadyRead())
{
    QByteArray data = pSocket->readAll();

    if(data.contains("\r\n\r\n"))
        break;
}

pSocket->write("HTTP/1.0 200 OK\r\n");

QString error_str = "Hello world!";

pSocket->write("Host: localhost:8081\r\n");
pSocket->write("Content-Type: text/html\r\n");
pSocket->write(tr("Content-Length: %1\r\n").arg(error_str.length()).toUtf8());
pSocket->write("\r\n");
pSocket->write(error_str.toUtf8());

delete pSocket;

最佳答案

问题可能是您在删除套接字之前没有刷新和关闭套接字吗?

编辑: George Edison 回答了他自己的问题,但很友好地接受了我的回答。这是对他有用的代码:

pSocket->waitForBytesWritten();

关于http - HTTP 协议(protocol)究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3844526/

10-10 05:58