cxpxatu521 2021-10-11 09:44 采纳率: 80%
浏览 6
已结题

将一个http服务器程序设置为精灵进程,为什么无法通过浏览器访问?

img

源码如下:


#include"tcpSocket.hpp"
#include<sstream>
#include <sys/types.h>
#include <sys/stat.h>    //umask
#include <cstdlib>    //exit
#include <unistd.h>    //fork、setsid、chdir、close
#include <signal.h>    //signal


//精灵进程的创建
void myDaemon_Init()
{
    //1.消除文件默认权限掩码的影响
    umask(0);

    //2.创建进程,让父进程退出,保证守护进程不是进程组长
    if(fork() != 0)
    {
        exit(0);
    }
    
    //3.调用setsid创建一个会话,让子进程成为守护进程;
    //    setsid会导致:
    //    1).调用进程成为新会话的首进程
    //    2).调用进程成为一个进程组的组长进程
    //    3).调用进程没有控制终端
    setsid();

    //4.将当前工作目录更改为根目录
    chdir("/");

    //5.关闭不需要的文件描述符
    close(0);    //关闭标准输入
    close(1);    //关闭标准输出
    close(2);    //关闭标准错误

    //6.忽略SIGCHLD信号
    signal(SIGCHLD, SIG_DFL);    
}

int main()
{
    //将当前进程设置为精灵进程
    myDaemon_Init();

    //将实际的业务逻辑处理代码放在一个循环中
    while(1){
    TcpSocket lst_sock;
    CHECK_RET(lst_sock.Socket());
    CHECK_RET(lst_sock.Bind("172.19.47.151",9000));
    CHECK_RET(lst_sock.Listen());
    
    while(1){
        TcpSocket con_sock;
        lst_sock.Accept(&con_sock);

        std::string buf;
        lst_sock.Recv(&buf);
        std::cout<<"请求信息:["<<buf<<"]"<<std::endl;

        std::string first_line="HTTP/1.1 200 OK\r\n";//首行
        std::stringstream  header;//头部
        std::string empty_line="\r\n";//空行
        std::string body="<html><body><h2>Enjoy code, enjoy your life!</h2><h1>This is a good day to code!</h1></body></html>";//正文
        header<<"Content-Type: text/html\r\n";
        header<<"Content-Length: "<<body.size()<<"\r\n";
        header<<"Connection: close\r\n";//设置为短连接
        
        //发送首行,头部,空行,正文
        con_sock.Send(first_line);
        con_sock.Send(header.str());
        con_sock.Send(empty_line);
        con_sock.Send(body);

        con_sock.Close();
    }
    lst_sock.Close();
    }

    return 0;
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月19日
    • 创建了问题 10月11日

    悬赏问题

    • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
    • ¥15 安装quartus II18.1时弹出此error,怎么解决?
    • ¥15 keil官网下载psn序列号在哪
    • ¥15 想用adb命令做一个通话软件,播放录音
    • ¥30 Pytorch深度学习服务器跑不通问题解决?
    • ¥15 部分客户订单定位有误的问题
    • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
    • ¥15 Bug traq 数据包 大概什么价
    • ¥15 在anaconda上pytorch和paddle paddle下载报错
    • ¥25 自动填写QQ腾讯文档收集表