tinyhttpd详解

tinyhttpd下载链接tinyhttpd

一.

socket就是插座(套接字),运行在计算机中的两个程序通过socket建立起一个通道,数据在通道中传输,分为流socket和数据报socket。
image.png
img
1.流socket基于TCP协议,双向字节流的通道,传输数据不会丢失、不会重复、顺序也不会错乱。提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。TCP协议面向连接,可靠的传输层协议,分段,重组,重传,滑动窗口,适用于对可靠性要求较高的场合。

2.数据报socket基于UDP协议,可能会丢失或错乱。对数据的长度有限制,但是它的速度比较高效率高。UDP协议不具有可靠性,不能保证消息一定会到达。无连接、不可靠的传输协议,花费的开销小,传输效率高。

3.比较:TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。

在TCP/IP网络应用中,两个程序之间通信模式是客户/服务端模式(client/server)

二.

1、服务端的工作流程

1)创建服务端的socket。

2)把服务端用于通信的地址和端口绑定到socket上。

3)把socket设置为监听模式。

4)接受客户端的连接。

5)与客户端通信,接收客户端发过来的报文后,回复处理结果。

6)不断的重复第5)步,直到客户端断开连接。

7)关闭socket,释放资源。

2、客户端的工作流程

1)创建客户端的socket。

2)向服务器发起连接请求。

3)与服务端通信,发送一个报文后等待回复,然后再发下一个报文。

4)不断的重复第3)步,直到全部的数据被发送完。

5)第4步:关闭socket,释放资源。

先启动服务端程序server,服务端启动后,进入等待客户端连接状态,然后启动客户端,程序退出时先关闭socket

对服务端来说,有两个socket,一个是用于监听的socket,还有一个就是客户端连接成功后,由accept函数创建的用于与客户端收发报文的socket

关于send,recv,socket,gethostbyname,connect,blind,listen,accept函数自行查阅 网络编程大全网站

服务端函数调用的流程是:socket->bind->listen->accept->recv/send->close

客户端函数调用的流程是:socket->connect->send/recv->close

其中send/recv可以进行多次交互
image.png
总结TCP服务端编写步骤,如下:

  1. 调用socket函数创建套接字。
  2. 调用bind函数给创建的套接字命名,分配IP地址和端口。
  3. 调用listen函数进行监听,等待客户端连接。
  4. 调用accept函数接受新的连接,做好相互通信准备。

具体工作过程:
在这里插入图片描述

三.

先简单地解释每个函数的作用:

 accept_request:  处理从套接字上监听到的一个 HTTP 请求,在这里可以很大一部分地体现服务器处理请求流程。

 bad_request: 返回给客户端这是个错误请求,HTTP 状态吗 400 BAD REQUEST.

 cat: 读取服务器上某个文件写到 socket 套接字。

 cannot_execute: 主要处理发生在执行 cgi 程序时出现的错误。

 error_die: 把错误信息写到 perror 并退出。

 execute_cgi: 运行 cgi 程序的处理,也是个主要函数。

 get_line: 读取套接字的一行,把回车换行等情况都统一为换行符结束。

 headers: 把 HTTP 响应的头部写到套接字。

 not_found: 主要处理找不到请求的文件时的情况。

 sever_file: 调用 cat 把服务器文件返回给浏览器。

 startup: 初始化 httpd 服务,包括建立套接字,绑定端口,进行监听等。

 unimplemented: 返回给浏览器表明收到的 HTTP 请求所用的 method 不被支持。

原文详解:
great1
great2

四.编译运行

在这里插入图片描述
没有出现变换色彩的html页面是因为内部权限还没设置好,直接输出localhost:47625就可
期待修改完成:
增加修改文件权限
需要修改root的文件夹
还有来自队友cgi的修改还没完成呜呜

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值