我以为我已经想通了,但是现在我正在编写一个网络服务器,有些地方不太正常。
应用程序在端口上监听传入请求,当它收到请求时,它会读取所有内容,直到序列“\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/