tinyhttpd — 0 — main

    原来一直都在做单片机,大三上学期刚准备做互联网,所以开始学C++,数据结构。一直都在学最基础的东西,没有用过框架,也基本没有熟悉那么多API,所以想通过接触一个小的开源程序学习,目的很多,想学习web sever的工作原理,因为将来肯定会做相关的业务,不了解一个本质不利于深入。

    要做一个http server肯定要了解一下基础的知识,必须要清楚的就是浏览器输入一个url后是怎么和服务器通信获得资源的。要想搞清楚这个问题,必须明白以下几个知识点:

        0、http协议       

        1、http工作原理

        2、http请求、响应步骤

    http协议:这里http协议不说协议内容,说一下到底什么是协议。协议其实就是双方的规定,双方都按照这个规定来,这样双方都知道彼此的意思。比如规定电报要用莫斯编码的方式发送,你用别的编码就解析不到正确的结果。 http协议就是一个超文本协议,其实就是一个字符串,不过这个字符串比较特殊,每一段代表什么含义都是已经确定好的。

    http工作原理:http协议定义了web客户端如何从web服务器请求资源,web服务器怎么把资源传送给web客户端。采用的是请求、响应模型。客户端发送一个请求报文请求数据,服务器发送响应报文返回数据。

    http请求,响应步骤:

        1、客户端连接web服务器

        2、客户端发送http请求报文

        3、服务器接受请求报文,返回一个响应报文

        4、释放tcp连接

        5、客户端解析响应报文

    写到这里,就明白了输入一个url后怎么得到数据的。如果不清楚请求报文,响应报文的可以看看我转载的一篇博客。http协议

    接下来就正式进入tinyhttpd的环节了,分析一个程序,肯定要从主函数看起,直接贴出代码,根据代码去分析流程。

int main(void)
{
	int server_sock = -1;
	u_short port = 0;
	int client_sock = -1;
	struct sockaddr_in client_name;
	socklen_t client_name_len = sizeof(client_name);
	pthread_t newthread;

	/*建立服务端的socket,开启监听*/
	server_sock = startup(&port);
	printf("httpd running on port %d\n", port);

	/*阻塞知道有客户端连接,此时会开启一个线程去处理客户端的请求*/
	while (1)
	{
		client_sock = accept(server_sock,
		                   (struct sockaddr *)&client_name,
		                   &client_name_len);
	if (client_sock == -1)
		error_die("accept");

	if (pthread_create(&newthread , NULL, accept_request, (void *)&client_sock))
		perror("pthread_create");
	}

	close(server_sock);

	return(0);
}

根据我在程序中的注释,我们知道main函数中就是服务端申请了一个套接字后开启监听,一旦有客户端连接,立即开一个线程去处理客户端的请求。最后释放了套接字资源。

    其实main函数中只有两个函数,一个startup,另一个accept_request,具体的内容先不用着急去看代码,先根据注释知道大概函数功能就可以,学习开源的程序不能直接一上来就看代码,必须对这个程序有一个大概的认识,从整体上有了认识后再深入细节,后面我们开始具体的分析每个函数。


   

    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值