http和socket

http是一个在TCP传输协议上层的应用层协议,所以它是一个协议。
所谓协议是指交流的双方要相互理解对方消息的意义,而制定的一个规范:规定每个消息按什么样的格式组织,
这样发送者按这个规定组织消息,接收这按同样的规定来理解消息,这样交流就没障碍和歧义了。


现在互联网相关的协议非常之多,而且都制定的很完善,除了http外,还有很多,比如常用的ftp、smtp、pop,
还有之前你看过的ICE、STUN、TURN等等。


而socket,通常指socket编程相关的一族API,这些API是操作系统实现、用于网络数据传输的编程接口,socket
不是协议,而且并没有绑定在某个(应用层)协议上,我们可以使用socket API进行TCP、UDP、SCTP等传输层
协议上开发应用协议,简单讲,所有需要网络传输的工作,都可以用socket来完成,socket API只负责帮我们发送、
接收数据,而不关心数据本身的格式(比如是不是http、ftp、smtp等消息)。


比如一个简单的http请求:


const char* req = "GET /index.php HTTP/1.1\r\n"
                  "Connection: close\r\n"
                  "Accept: */*\r
write(sockfd, req, strlen(req));


上面的req就是符合HTTP协议的一个消息,但利用socket发送的操作根本不关心req的格式,它只管将这个字节数组
正确传输出去。




又如一个简单的ftp命令(即请求)


const char* req2 = "RETR /pub/books/abc.pdf\r\n";


write(sockfd, req2, strlen(req));


同上,利用socket发送根本不管是否是一个ftp命令,它只管发送。




很多情况下,我们不遵循什么已知的标准协议,也可以,如:


const char* req3 = "hello, 蓝波!";


write(sockfd, req3, strlen(req));


同样,只管发送,不管格式。




上面举了几个例子,是强调,socket并不依赖于某种特定的应用层协议,它仅仅是封装了数据传输所必须的
动作,可以接收、发送任意格式数据(这些API完全不关心格式)。




关于http协议相关的库,应该非常多吧,因为http协议实现还是非常简单的,至于httpclient.lib我是没听过,
我基本不会直接跟http协议打交道,能用它正确解析http请求、回应就可以了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值