`
sd4886656
  • 浏览: 88545 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对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连接就不再透明,就要自己来完成这一连接过程了。求教呀求教呀。。。。。
  • 大小: 21.4 KB
分享到:
评论

相关推荐

    java开发论文对JAVA+Socket编程的理解

    论文-对JAVA+Socket编程的理解-何力亚.doc

    socket概念的理解

    socket概念的理解希望大家共同研究 共同学习

    原生Socket 实现HTTP、HTTPS通信

    使用Java 最原始的Socket 方式逐步实现Http/Https 网络通信,加深对于网络协议的理解

    深入理解socket中的select模型

    对于套接字socket 的 select 模型,做了几种模式的解释,为SOCKET编程提供参考指导

    socket 聊天室

    VC++对网络编程的支持有socket支持...可以这样理解:Socket实际上是一个通信端点,通过它,用户的Socket程序可以通过网络和其他的Socket应用程序通信。Socket存在于一个“通信域”里,并且与另一个域的Socket交换数据。

    HPSocket C++控制台版DEMO.rar

    此DEMO使用标准C++控制台来实现,对于刚接触网络编程的新手来说可以更容易跟踪理解 HP-Socket 组件的工作流程,从而快速移植到自己的项目中。 此DEMO采用PACK模型,包含服务器及客户端的实现。PACK模型可以让你不用...

    socketdemo 一个用来学习socket入门的例子

    简单实现了socket通信功能,适合socket初学者用来学习和理解socket,也是本人以前学习socket的时候入门的例子,希望对大家有用

    Socket之tcp和udp

    本人最近整理了一些socket关于tcp和udp的小例子,便于初学者的学习和理解

    socket通信,java和C#版本

    该文档是我自己整理的 java和c# 使用socket通信。 java为客户端,c#为服务器端。也可以调换过来。。代码很容易理解。

    socket编程中的函数的理解

    这是的在学习中对socket编程中一些函数的理解,和大家分享一下。

    C#写的超简单的局域网对战游戏 理解socket

    C#写的超简单的局域网对战游戏 理解socket编程 和简单的C#2d画图

    简单的聊天程序java和socket的应用

    希望初学者可以看看,更加理解socket的应用和java的学习,希望对你们有些帮助。

    SOCKET网络编程技术PPT

    对SOCKET的网络编程和SOCKET技术进行了详细讲解。套接字接口的主要概念是套接字(s o c k e t )。理解套接字的好方法是把它看作本地应用进程与网络的接入点。接口定义了各种操作,包括创建套接字、将套接字连到网上...

    Socket局域网聊天模拟

    项目描述:一款模拟群体聊天室的应用,该应用提供给用户一个群体聊天的平台...这也是我初涉猎socket聊天领域写的第一个程序,功能不多,只是局域网内聊天,虽然代码结构不成熟,但是对于初学iOS的童鞋还是挺容易理解的。

    Socket

    参考MSDN上的Socket例程,以Form为框架,写的关于Socket通信的一个例子,有SocketServer(服务器端)和SocketClient(客户端)两部分,对理解多线程和Socket基本编程有一定的帮助,其中仍有一些地方有待改进。

    socket 1.0(自己写的socket内部实现函数,及其头文件)

    网上的很多代码都是将主函数中如何使用...但是socket它的实现需要加进部分头文件和调用下层的TCP、UDP,所以socket.c在编译时会出现一定错误,但是并不妨害理解socket内部的实现过程。(这只是第一个版本,随时更新)

    实战Linux Socket 编程-示例源码

    实战Linux Socket 编程-示例源码,加深你对Linux-socket编程的理解!

    c# Socket 实现源码

    是初学者学习socket 编程的最好实例,能够帮助快速理解socket的原理和应用。

    《NIO与Socket编程技术指南》高洪岩.zip

    非常详细地讲解了NIO中的缓冲区、通道、选择器、编码,以及使用Socket技术实现TCP/IP和UDP编程,细化到了演示全部SocketOption的特性,这对理解基于NIO和Socket技术为基础所开发的NIO框架是非常有好处的,本书以案例...

    C++Socket编程详解

    详细的C++Socket编程教程,里面有详细代码,更加易于理解。

Global site tag (gtag.js) - Google Analytics