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请求、回应就可以了。
所谓协议是指交流的双方要相互理解对方消息的意义,而制定的一个规范:规定每个消息按什么样的格式组织,
这样发送者按这个规定组织消息,接收这按同样的规定来理解消息,这样交流就没障碍和歧义了。
现在互联网相关的协议非常之多,而且都制定的很完善,除了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请求、回应就可以了。