day8 域名解析与http服务器实现原理

news2025/1/18 20:15:04

域名解析gethostbyname函数

主机结构在 <netdb.h> 中定义如下

 结构的成员包括:

h_name :主机的正式名称

h_aliases:主机的备用名称数组,以 NULL 结尾指针

h_addrtype:地址类型;(AF_INET或AF_INET6)

h_length:地址的长度(以字节为单位)

h_addr_list:指向主机网络地址的指针数组(按网络字节顺序),由 NULL 指针终止

h_addr h_addr_list:中的第一个地址,以实现向后兼容性

万维网服务器的实现原理

HTTP 规定:在 HTTP 客户与 HTTP 服务器之间的每次交互,都由一个 ASCII 码串构成的请求和一个类似的通用互联网扩充,即“类MIME (MIME-like)”的响应组成。

HTTP 报文通常都使用 TCP 连接传送。

万维网服务器实现

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <strings.h>

#define PORT 80
#define BACKLOG 5
#define HTTPFILE "http-head.txt"
#define HTMLFILE "home.html"

int ClientHandle(int newfd);

int main(int argc, char *argv[])
{
	int fd, newfd;
	struct sockaddr_in addr;
	/*创建套接字*/
	fd = socket(AF_INET, SOCK_STREAM, 0);
	if(fd < 0){
		perror("socket");
		exit(0);
	}
	int opt = 1;
	if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const void *) &opt, sizeof(opt) ))
		perror("setsockopt");

	addr.sin_family = AF_INET;
	addr.sin_port = htons(PORT);
	addr.sin_addr.s_addr = 0;
	/*绑定通信结构体*/
	if(bind(fd, (struct sockaddr *)&addr, sizeof(addr) ) == -1){
		perror("bind");
		exit(0);
	}
	/*设置套接字为监听模式*/
	if(listen(fd, BACKLOG) == -1){
		perror("listen");
		exit(0);
	}
	/*接受客户端的连接请求,生成新的用于和客户端通信的套接字*/
	newfd = accept(fd, NULL, NULL);
	if(newfd < 0){
		perror("accept");
		exit(0);
	}
	ClientHandle(newfd);
	close(fd);
	return 0;
}

int ClientHandle(int newfd){
	int file_fd = -1;
	char buf[BUFSIZ] = {};
	int ret;

	do {
		ret = recv(newfd, buf, BUFSIZ, 0);
	}while(ret < 0 && errno == EINTR);
	if(ret < 0){
		perror("recv");
		exit(0);
	}else if(ret == 0){
		close(newfd);
		return 0;
	}else{
		printf("=====================================\n");
		printf("%s", buf);
		fflush(stdout);
	}

	bzero(buf, ret);
	file_fd = open(HTTPFILE, O_RDONLY);
	if(file_fd < 0){
		perror("open");
		exit(0);
	}
	ret = read(file_fd, buf, BUFSIZ);
	printf("%s\n", buf);
	send(newfd, buf, ret, 0);
	close(file_fd);

	bzero(buf, ret);
	file_fd = open(HTMLFILE, O_RDONLY);
	if(file_fd < 0){
		perror("open");
		exit(0);
	}
	ret = read(file_fd, buf, BUFSIZ);
	printf("%s\n", buf);
	send(newfd, buf, ret, 0);
	close(file_fd);

	close(newfd);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/556559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础知识6

知乎上的面试题&#xff1a;https://zhuanlan.zhihu.com/p/546032003 一、Topk问题以及变种&#xff0c;各种解法 微博的热门排行就属于 TopK 问题 TopK 一般是要求在 N 个数的集合中找到最小或者最大的 K 个值&#xff0c;通常 N 都非常得大。 算法的优点是不用在内存中读入全…

经典组件知识(kafka,ngix)

消息队列的作用 解耦、削峰、 异步&#xff08;非必要逻辑异步运行&#xff0c;加快响应速度&#xff09; kafka 首先有个topic的概念&#xff0c;类似于表。 Partition 分区&#xff1a;一个topic下面有多个分区&#xff0c;这些分区会存储到不同的服务器上面&#xff0c;或者…

如何使用 Django 进行测试驱动开发,我来告诉你

所谓测试驱动开发(TDD)&#xff0c;就是先编写测试用例&#xff0c;然后编写代码来满足测试用例&#xff0c;具体包含以下步骤&#xff1a; 编写测试用例。编写代码满足测试用例中的需求。运行测试用例。如果通过&#xff0c;说明代码满足了测试用例所定义的需求。如果未通过&…

armday2

.text .global _start _start: bl LED1_INITbl LED1_ONbl delay_1sbl LED1_OFFbl LED2_INITbl LED2_ONbl delay_1sbl LED2_OFFbl LED3_INITbl LED3_ONbl delay_1sbl LED3_OFFbl _start/**********LED1点灯PE10**************/ LED1_INIT:1.通过RCC_HB4_ENSETR寄存器设置GPIOE组…

PoseiSwap:为何青睐 Layer3?又为何选择 Celestia 作为技术伙伴?

自 PoseiSwap 在 Nautilus Chain 上线后&#xff0c;该 DEX 的整体市场进展十分顺利。我们看到&#xff0c;其不仅在 4 月&#xff0c;以 1000万美元的估值&#xff0c; 获得了来自于 Zebec Labs 的首轮 150 万美元的融资。而在本月&#xff0c;在 Zebec 生态的帮助下&#xff…

利用prusa 3d打印地形模型 如何合理切片并提高打印速度

如上图&#xff0c;我们选择打印一个宽10cm 的地形模型&#xff0c;通过prusa切片&#xff0c;显示时间为22小时31分钟。这个速度大概一天&#xff0c;确实不是我们要的速度&#xff0c;如何提高速度又不失去打印细节且不增加失败风险呢。 1.减少填充 10%的填充对于创想三维en…

RK3568平台开发系列讲解(驱动基础篇)RK平台UART的使用

🚀返回专栏总目录 文章目录 一、引脚定义1.1 UART91.2 RS232和RS485二、设备树配置三、调试3.1 连接硬件3.2 打开主机的串口终端3.3 板子发送数据3.4 板子接收数据3.5 主机退出kermit串口连接四、UART2普通串口配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇…

C++——模板初阶

文章目录 一.泛型编程二.函数模板1.函数模板的概念2.函数模板的格式3.函数模板的原理4.函数模板的实例化&#xff08;1&#xff09;隐式实例化&#xff08;2&#xff09;显式实例化 5.模板参数的匹配原 三.类模板1.类模板的定义格式2.类模板的实例化 前言&#xff1a; 本章我们…

Flutter问题记录 - Text组件设置不限行数无效

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 梳理Flutter项目的过程中发现还有一些遗留的TODO没处理&#xff0c;其中有一个和Text组件相关。 开发环境 Flutter: 3.7.12Dart: 2.19.6 问题描述 Text组件设置maxLines: null不限制行数&#xff1a; Text(The […

gradio入门示例

随着chat-gpt等机器人对话框架的流行&#xff0c;让一个名为gradio的框架也火热起来&#xff0c;这个框架可以开启一个http服务&#xff0c;并且带输入输出界面&#xff0c;可以让对话类的人工智能项目快速运行。 gradio号称可以快速部署ai可视化项目。 下面通过两个示例来感受…

C++学习记录——이십사 位图、布隆过滤器、哈希切割

文章目录 1、位图位图应用优缺点 2、布隆过滤器1、哈希函数2、删除 3、哈希切割应用 本篇gitee 1、位图 先看一个题目&#xff1a; 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个树是否在这40亿个数中&#xff1f; 这里可能…

《面试1v1》线程池

我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 面试官&#xff1a; 你好&#xff0c;很高兴见到你。请问你对线程池有什么了解&#xff1f; 候选人&#xff1a; 你好&#xff0c;我对线程池非常了解。线程池是一种…

前后端联调统一校验规则

文章目录 统一校验实现1.什么是统一校验2.统一校验的实现&#xff08;1&#xff09;引入依赖&#xff08;2&#xff09;基于注解&#xff08;3&#xff09;使用案例【1】定义校验规则【2】开启校验【3】统一异常处理器捕获校验产生的异常 3.分组校验(1)定义公共的校验分组(2)定…

完全自主研发,聚芯微发布3D dToF图像传感器芯片!

日前&#xff0c;由中国半导体行业协会IC设计分会&#xff08;ICCAD&#xff09;、芯原股份、松山湖管委会主办的主题为“AR/VR/XR元宇宙”的“2023松山湖中国IC创新高峰论坛”正式在广东东莞松山湖召开。武汉市聚芯微电子有限责任公司发布了完全自主知识产权的3D dToF图像传感…

Spring面试整理

什么是Spring&#xff1f; Spring的优缺点&#xff1f; Spring的模块组成 Spring框架中使用了哪些设计模式&#xff1f; 详细讲解下核心容器&#xff08;Spring context&#xff09;模块 Spring框架中有哪些不同类型的组件 Spring控制反转&#xff08;IOC&#xff09; 什…

由浅入深Dubbo核心源码剖析SPI机制

目录 1 SPI的概述1.1 SPI的主要作用1.2 入门案例1.3 总结 2 Dubbo中的SPI2.1 概述2.2 入门案例2.3 源码分析 3 SPI中的IOC和AOP3.1 依赖注入3.2 动态增强 4 动态编译4.1 SPI中的自适应4.2 javassist入门4.3 源码分析 1 SPI的概述 在 Dubbo 中&#xff0c;SPI 是一个非常重要的模…

Spring Boot 3.x 系列【35】服务监控 | 健康信息

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.5 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 1. 配置2. 基本原理3. 自动配置4. 自定义健康指标5. 分组6. 数据源1. 配置 Health是健康的意思,该端点用来检查正在运行…

XDP入门--BPF程序如何转发报文到其它网卡

本文目录 1、测试环境&#xff1a;2、实现的功能&#xff0c;使用bpf_redirect直接转发收到的报文到另外一张网卡3、测试步骤与测试结果 1、测试环境&#xff1a; 参照把树莓派改造成无线网卡(3)-----共享无线网络&#xff0c;无线网络转换成有线网络&#xff0c;让有线网络设…

从零实现一个数据库(DataBase) Go语言实现版 3.B树: 思路

英文源地址 关于B树和二叉查找树的直觉 我们的第一个直觉来自于平衡二叉树(BST).二叉树是用于排序数据的常用数据结构.在插入或移除键后保持树的良好形状就是’平衡’的意思.如前一章所述, 为了利用"页"(IO的最小单元), 应该使用n叉树而不是二叉树. b树可以由二叉查…

有哪些值得推荐的科研检索平台?

有哪些值得推荐的检索和笔记平台&#xff1f; 有哪些值得推荐的检索平台&#xff1f;文献检索&#xff0c;调研的推荐1. arXiv相关信息介绍推荐功能及用法 2. Web of Science相关信息介绍推荐功能及用法 3. Google Scholar相关信息介绍推荐功能及用法 4. Sci-Hub相关信息介绍 5…