我试图在c上实现一个简单的http服务器,但遇到了一些小问题。 请多关照
流程:
服务器接收端口-在启动- accept请求后创建线程处理-返回结果
问题:
向客户端发送结果后,close (浏览器页面显示“连接已重置”
如果不关闭,页面将一直加载
思考:
是我返回的http数据不完整还是其他原因?
代码:
char buf[1024];
发送头部
sprintf(buf,' HTTP/1.0 200 OKrn );
send(client_FD,buf,strlen ),0 );
sprintf(buf,' Content-Type: text/html; charset=utf-8rn ';
send(client_FD,buf,strlen ),0 );
sprintf(buf,'rn ';
send(client_FD,buf,strlen ),0 );
//发送内容
sprintf(buf,'
测试'; send(client_FD,buf,strlen ),0 );
sprintf(buf,'
欢迎'; send(client_FD,buf,strlen ),0 );
//关闭连接
关闭(client _ FD;
回答:
因为你的浏览器不知道你的数据是否返回,所以你必须告诉浏览器你要响应的正文长度,并使用HTTP响应标头中的内容长度
Cchar *body='。 请参阅。 //要响应的正文
sprintf(buf,' HTTP/1.0 200 OKrn );
send(client_FD,buf,strlen ),0 );
sprintf(buf,' Content-Type: text/html; charset=utf-8rn ';
send(client_FD,buf,strlen ),0 );
//设置正文长度Content-Length
sprintf(buf,' Content-Length: %drn ',strlen ) body );
send(client_FD,buf,strlen ),0 );
sprintf(buf,'rn ';
send(client_FD,buf,strlen ),0 );
//发送正文
send(client_FD,body,Strlen ),0 );
sprintf(buf,'rn ';
send(client_FD,buf,strlen ),0 );
还有一个方法。 有点麻烦,我脑子里用“Transfer-Encoding:chunked”。 详情请在百度上查看。
回答:
那是因为你没有写头上的内容长度