记录:
非常简单的WEB处理程序,很多时候有新想法,可以用这个试验,没有安装和配置。这个就是监听一个端口,把连接重定向到另一个程序中,而这个程序就是新想法。
JAVA的类库很多,很方便。尤其是不用安装、配置,很方便。
#include#include #include #include #include #include #include #include #include #include #include #define SERV_PORT 9000 extern int errno; int main() { int listenfd = -1; if( setpgid(getpid() , getpid()) < 0 ) { // 设置进程组,方便管理。 perror("错误:setpgidn"); exit(__LINE__); } signal(SIGCLD, SIG_IGN); { char name[32]; prctl(PR_SET_NAME, (unsigned long)"ZX web"); prctl(PR_GET_NAME, (unsigned long)name); printf("%sn", name); } listenfd = socket(AF_INET, SOCK_STREAM, 0); if (listenfd < 0) { perror("错误:socketn"); exit(__LINE__); } else { printf("socket()rn"); } if (fcntl(listenfd, F_SETFD, FD_CLOEXEC) != 0) { perror("错误:fcntln"); exit(__LINE__); } else { printf("fcntl()rn"); } { int yes = 1; if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (void*)&yes, sizeof(yes)) < 0) { perror("错误:setsockoptn"); exit(__LINE__); } else { printf("setsockopt()rn"); } } { struct sockaddr_in servaddr; bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //因为本机地址可以有很多种表示,htonl只是为了保险起见,可以去掉 servaddr.sin_port = htons(SERV_PORT); if (bind(listenfd, (struct sockaddr*) & servaddr, sizeof(servaddr)) == 0) { printf("bind()rn"); } else { perror("错误:bindn"); exit(__LINE__); } } if (listen(listenfd, 100) == 0) { printf("listen()n"); } else { perror("错误:listenn"); exit(__LINE__); } while (1) { int connfd = -1; struct sockaddr_in cliaddr; socklen_t cliaddr_len; cliaddr_len = sizeof(cliaddr); connfd = accept(listenfd, (struct sockaddr*) & cliaddr, &cliaddr_len); //如果得不到客户端发来的消息,将会被阻塞,一直等到消息到来 if (connfd > 0) { int pid = -1; printf("accept()rn"); pid = fork(); if (pid < 0) { perror("错误:fork():create subprocess fail.n"); close(connfd); } else if (pid == 0) { printf("————子进程运行.n"); dup2(connfd, 0); // 重定向子进程的stdin、stdout dup2(connfd, 1); // 重定向子进程的stdin、stdout return execl("/usr/local/jdk/bin/java", "java", "-jar", "/opt/java/T200/data/httpUntitled2.jar", NULL); } else { printf("fork()rn"); close(connfd); connfd = -1; } } else { perror("错误:acceptn"); exit(__LINE__); } } }



