栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

非常简单的WEB服务器

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

非常简单的WEB服务器

记录:
  非常简单的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__);
		}
	}
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/752401.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号