Nat*_*man 4 sockets connection qt header http
我以为我已经想到了这一切,但现在我正在写一个网络服务器,有些东西不太正常.
应用程序在端口上侦听传入的请求,当收到请求时,它会读取所有内容,直到序列"\ r \n \n \n \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!
Run Code Online (Sandbox Code Playgroud)
但是,当Firefox或Chrome尝试查看该页面时,它将不会显示.Chrome通知我:
错误324(net :: ERR_EMPTY_RESPONSE):未知错误.
我究竟做错了什么?
以下是一些代码:
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;
Run Code Online (Sandbox Code Playgroud)
我想到了!
在将数据写入套接字后,我必须调用:
pSocket->waitForBytesWritten();
Run Code Online (Sandbox Code Playgroud)
...或者缓冲区没有输出.
可能问题是你没有在删除套接字之前刷新并关闭套接字吗?
编辑:乔治爱迪生回答了他自己的问题,但很友好地接受了我的回答.这是适合他的代码:
pSocket->waitForBytesWritten();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1666 次 |
| 最近记录: |