【socket】socket介绍-socket与http服务通信

之前几篇文章都是介绍了socket的基础知识,包括socket的TCP/IP协议栈,socket的服务端集中常见的实现模式,还有对于socket在内核中都是如何支持和实现的。这篇文章就讲解socket的一种使用。
在网络通信种,基本所有通信底层的数据传输都是基于socket的。当然可能有部分的应用场景是直接在数据链路层进行传输,跳过TCP/IP协议栈的网络层。不过在绝大多数情况下还有行业中,对于开发者来说网络层就是可见的最低层了。通过socket进行端到端的通信也是最常用的通信方式,可以使用各种各样的协议对要传输的数据进行封装,然后通过socket发送。这篇文章就是讲解使用socket直接访问http服务,通过socket封装http协议,然后进行http的数据通信。

协议介绍

要想直接通过socket来模拟http通信,就必须了解一下几点:
1、TCP是可靠、有序的传输协议。这句话的意思是当接收端接受到网络层的数据的时候,肯定和发送端发送的次序是一致的。你的应用协议层对数据次序是无感的,你不需要对接受到的数据的次序负责,接收到之后就是次序正确的。
2:HTTP是有自己标准的的协议,发送的数据必须符合http标准,对端才能认为这是个正确的http协议。这句话的意思是说socket发送数据是没有所谓的协议的,但是它会封装自己这一层的协议然后扔给数据链路层。对于他发送的数据,它是不管发送的是什么的。然而http是有自己的协议的,我们要通过socket来发送一个http协议的数据给对端的http服务,所以需要你自己封装构造http协议。
对于http协议来说,现在常用的还是http1.0或者http1.1,http2.0标准已经推出,但是普及还需要一定的时间。http协议是一个复杂又庞大的协议,在这里短短的篇幅是无法展开的,只对最需要关注的点进行介绍,之针对http中的get方法进行介绍。
在http通信中最主要的就是http的头部,一个合法的http头决定了这个请求会不会被对端正确解析,并对该条请求提供服务。下面先贴出一个合法的http头部,下面是当你访问百度的时候,它某个请求的http头部。

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:BAIDUID=B28CB63662675F1060F6A7343B53C06A:FG=1; BIDUPSID=B28CB63662675F1060F6A7343B53C06A; PSTM=1450582737; BDUSS=pIWXViZnJGOTEzZXcyTWl6eEdNbUwxfmVGWkRiZThvU1lKZDhyNWVOUGdyNTFXQVFBQUFBJCQAAAAAAAAAAAEAAAAW5bsIczEyMDkyMjcxOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAidlbgInZWQ1; BD_HOME=1; H_PS_PSSID=18511_1450_17956_17947_18500_17000_17073_15298_11657_18039_17999; BD_UPN=12314353
Host:www.baidu.com
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值