• 首页
  • 每日推荐
  • VPS优惠
    • 国内VPS
    • 高防VPS
    • 美国VPS
    • 香港VPS
  • 虚拟主机
  • 独立云服务器
  • 教程
  • 干货
  • 八卦
  • 站长 合作
  • 首页
  • 每日推荐
  • VPS优惠
    • 国内VPS
    • 高防VPS
    • 美国VPS
    • 香港VPS
  • 虚拟主机
  • 独立云服务器
  • 教程
  • 干货
  • 八卦
德阳高防100G2H4G70/月 美国洛杉矶云服务器低至23/月 大连20G防御BGP28/月 上云旅途云就上旅途云 免费高防虚拟主机免费拿
QQ:80071052 广告位火热招募 QQ:80071052 广告位火热招募 QQ:80071052
#每日推荐#

HTTP 服务器程序编写过程总结(一)

2020-12-28 20:49:22
63 0 0

HTTP服务器,就是一个运行在主机上的程序。程序启动了之后,会一直在等待其他所有客户端的请求,接收到请求之后,处理请求,然后发送响应给客户端。客户端和服务器之间使用HTTP协议进行通信,所有遵循HTTP协议的程序都可以作为客户端。

先直接上代码,然后再详细说明实现细节。

测试运行

代码写好之后,运行测试一下,将上面代码保存到server.c,然后编译程序:

运行

服务器运行,监听9001端口。再用netstat命令查看:

server程序在监听9001端口,运行正确。接着用浏览器访问,成功输出了Hello World,再尝试用telnet去模拟HTTP请求:

1、成功连接

2、发送HTTP请求

3、HTTP响应结果

上面是一个最简单的server程序,代码比较简单,省去一些细节,下面通过代码来学习一下socket的编程细节。

启动server的流程

socket 函数

创建一个套接字,通过各参数指定套接字的类型。

套接字地址结构

在socket编程中,大部分函数都用到一个指向套接字地址结构的指针作为参数。针对不同的协议类型,会有不同的结构体定义格式,对于ipv4,结构如下所示:

注:sockaddr_in是**Internet socket address structure**的缩写。

ip地址结构

套接字地址结构的作用是为了将ip地址和端口号传递到socket函数,写成结构体的方式是为了抽象。当作为一个参数传递进任何套接字函数时,套接字地址结构总是以引用方式传递。然而,协议族有很多,因此以这样的指针作为参数之一的任何套接字函数必须处理来自所有支持的任何协议族的套接字地址结构。使用void *作为通用的指针类型,因此,套接字函数被定义为以指向某个通用套接字结构的一个指针作为其参数之一,正如下面的bind函数原型一样。

这就要求,对这些函数的任何调用都必须要将指向特定于协议的套接字地址结构的指针进行强制类型转换,变成某个通用套接字地址结构的指针。例如:

对于所有socket函数而言,sockaddr的唯一用途就是对指向特定协议的套接字地址结构的指针执行强制类型转换,指向要绑定给sockfd的协议地址。

bind函数

将套接字地址结构绑定到套接字

地址的长度

绑定了socket之后,就可以使用该socket开始监听请求了。

listen函数

将sockfd从未连接的套接字转换成一个被动套接字,指示内核应接受指向该套接字的连接请求。

listen函数会将套接字从CLOSED状态转换到LISTEN状态,第二个参数规定内核应该为相应套接字排队的最大连接个数。

关于backlog参数,内核为任何一个给定的监听套接字维护两个队列:

1、未完成连接队列,在队列里面的套接字处于SYN_RCVD状态

2、已完成队列,处于ESTABLISHED状态

两个队列之和不超过backlog的大小。

listen完成之后,socket就处于LISTEN状态,此时的socket调用accept函数就可以接受客户端发来的请求了。

傲天
相关文章
主机啦 – 新年特优惠成都高防16H16G10M月付263元
福云数据 – 美国高防GIA服务器大促销
狸猫云 – 香港高速CN2-香港高速GIA云服务器促销活动
福云数据 – 美国高防GIA服务器大促销超低价格
青云互联 – 年终特惠香港弹性云八折:15元/月起,可自定义配置,可选windows
评论 (0)
再想想
商家广告
sidebar_b1
sidebar_b1
最新文章
迅马数据 – 辽宁多线高防,河南洛阳多线,香港三网CN2,广州BGP特价VPS优惠活动
2021-02-25 0:35:53
青云 – 企业/个人云服务器促销,企业级云机安全靠谱
2021-02-23 23:37:05
硅云 – 香港免备案云服务器低至10元/月超低价超实惠
2021-02-23 23:23:03
主机啦 – 新年特优惠成都高防16H16G10M月付263元
2021-01-27 17:06:15
福云数据 – 美国高防GIA服务器大促销
2021-01-24 15:29:28
商家广告
sidebar_b1
sidebar_b1
sidebar_b1
  • 投稿
  • 广告合作
  • 网站地图
Copyright © 2021 云搜 鄂ICP备19025735号-3
友情链接: 旅途云 云服务器排行