对Socket、HTTP的理解

在做J2ME的开发时经常会遇到访问网络这样的行为,高度封装的httpConnection和Socket的关系有时候搞得我也是云里雾里的,这几天回头看了看大三时候的教材又有点小领悟,赶紧记下,呵呵,看来基础知识真的很重要的。


 

我们知道任何模式的网络通信,比如BS模式,CS模式,都可以归结为2个进程之间的通信。

进程之间要怎么通信呢?

在《Computer Networking   A Top-Down Approach》这本经典的教材中是这样描述的:

进程通过一个称为套接字(Socket)的软件接口在网络上发送和接收报文。打个比方,进程可类比于一座房子,而它的套接字可类比于它的门。当一个进程想向位于另外一个主机上的另一个进程发送报文时,他把报文推出门(套接字)。该发送进程假定门到另一侧之间有运输的基础设施,该基础设施负责把报文传送到目的进程的门口。一旦报文抵达目的的主机,它通过报文接受进程的门(Socket)传递,然后接受进程对报文进行相应的处理。

由此我们知道,应用程序的开发者可以控制套接字在应用层的所有东西(比如选择http传输还是https,或者设计自己的规则进行报文段的交换),但是对该套接字的运输层段几乎没有控制。程序猿对于运输层的控制仅限于:1选择运输层协议(TCP or UDP);2也许能设定几个运输层参数,如最大缓存数,最大报文段长度。

我们是否可以这样理解Socket:它是在应用层与传输层之间的接口,你去任何人的房子(应用层),你选择by car or by bus(传输层),但是当你到了对方家的时候都要从门进去吧。Socket本身的意思也是电源插孔的意思,启这个名字也不是没有意义的。

 


下面来谈谈对HTTP这个东西的理解,HTTP的具体内容请看这里

HTTP首先是一个用用层的协议,协议嘛,就是通信双方的一种约定。HTTP定义了Web客户端是如何像服务器请求web页面的,以及服务器如何将web页面传送给客户机的。

HTTP使用TCP作为它的支撑运输协议,而非UDP。客户端发起一个与服务器的TCP连接,一旦连接建立,浏览器和服务器就可以通过套接字接口访问TCP传输的报文段。客户端的套接字接口Socket是客户端进程与TCP连接之间的门。服务器端的Socket接口则是服务器进程与TCP之间的门。客户端从Socket发送HTTP 请求报文段、接收HTTP响应报文段。一旦客户机发送了一个请求报文段,该报文段就脱离了客户机控制进入TCP的控制。所以,HTTP是建立这TCP协议之上的协议,对于访问网页这样的行为,总是伴随着请求/响应这样的一对行为出现,这一对可能在一个TCP连接中完成,也有可能N个请求/响应在同一个TCP连接中完成。


话说到这里,最近遇到了一个难题,开发J2ME访问https的时候,总是失败,有些手机根本不支持https协议,按照以上这样的逻辑,https同样是一个应用层的协议,不管客户机和服务器端怎样复杂的交互报文段(要传递公钥什么的,不是很懂,不像http一个请求一个响应就ok了),最终都要通过Socket传递到TCP所在的传输层,那么我们放弃httpsConnection这样高度封装的类库之后,https连接就不再透明,就要自己来完成这一连接过程了。求教呀求教呀。。。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值