在做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
分享到:
相关推荐
在本文中,我们将深入探讨如何使用C#编程语言和...总的来说,通过C#和Socket实现HTTP Web服务器涉及网络通信的基本原理、HTTP协议的理解以及C#编程技巧。这不仅是一项有趣的实践任务,也是提升网络编程技能的有效途径。
HTTP服务器需要理解HTTP协议,以便正确响应客户端的请求。HTTP请求通常包含一个方法(GET、POST等)、一个URL和HTTP头。对于本例,我们关注GET请求,因为浏览器通常使用GET请求获取HTML文件。我们可以读取`Socket`的...
socket 概念的理解 _socket_ 是系统提供的用于网络通信的方法,实质上不是一种协议,而是给程序员提供...只有通过深入理解 Socket 的概念和原理,我们才能更好地应用 Socket 编程技术,开发出更加优秀的网络应用程序。
3. **错误处理**:示例代码中还包括了对可能出现的错误进行了捕获和处理,例如在创建 Socket、绑定地址等步骤中出现问题时会有相应的错误提示并终止程序运行。 #### 五、代码示例解析 虽然题目中提供的代码片段不...
总之,通过Socket模拟HTTP协议头是一种学习网络编程、理解HTTP工作原理的有效方法。这种方式可以帮助开发者更好地控制网络请求,实现自定义功能,同时也可以在没有现成库支持的情况下进行低级网络通信。在实际项目中...
本文将深入探讨如何使用Java的原生Socket类实现HTTP和HTTPS通信,以此来加深对网络协议的理解。 首先,我们来看HTTP(超文本传输协议),它是互联网上应用最广泛的一种网络协议,用于从Web服务器传输超文本到本地...
本文将深入探讨如何使用C语言通过SOCKET实现HTTP协议,并且重点讲解如何构造和发送JSON格式的数据进行POST请求。我们将以Visual Studio 2013作为开发环境,通过分析“scoket_http”这个压缩包中的文件,来揭示这一...
在深入理解了SuperSocket的核心概念和主要功能后,开发者可以通过提供的文档和示例代码,快速搭建自己的Socket服务器,并实现高效稳定的网络通信。通过不断实践和优化,可以充分利用SuperSocket的强大能力,构建出高...
总之,Socket实现HTTP下载协议需要理解HTTP的工作原理,构建正确的HTTP请求,解析服务器的响应,并使用Socket进行数据传输。这个过程涉及网络编程、HTTP协议解析以及文件I/O等多个方面的知识。通过实践和学习,你...
Socket 编程详解 在网络编程中,Socket 是一个基本概念, plays a crucial role in ...Socket 编程是网络编程的基础,掌握 Socket 编程可以帮助您更好地理解网络应用程序的实现原理,并实现更加复杂的网络应用程序。
Socket池和Socket连接池是网络编程中的重要概念,主要用于提高应用程序的性能和效率。在处理大量并发网络连接时,传统的单个Socket连接方式可能会导致系统资源的过度消耗,因此引入了Socket池技术。 Socket,全称是...
这使得服务端可以理解和响应不同类型的客户端消息。 4. **Command**:命令处理器是SuperSocket中的另一个关键部分,它负责执行客户端发送的命令。开发者可以根据业务需求定义自己的命令类,实现对客户端请求的逻辑...
HPSocket库的核心功能在于其对TCP/IP协议的支持,包括TCP服务器、TCP客户端、UDP服务器和UDP客户端等网络通信模式。这些模式允许开发者构建可靠的点对点或者多点的网络连接,用于数据的传输和交互。TCP协议提供面向...
在IT行业中,网络通信是不可或缺的一部分,而HTTP(超文本...通过理解和使用HttpSocket,可以大大简化在C++环境中开发需要HTTP通信功能的应用程序的工作。这个库的源代码提供了学习和自定义HTTP通信行为的宝贵资源。
首先,我们要理解HTTP协议的基本结构。HTTP是基于TCP/IP的应用层协议,其请求由方法(GET, POST等)、URL、协议版本、头部和消息主体组成。响应则包括状态码、原因短语、协议版本、头部和消息主体。在下载场景中,...
**Java中的HTTP和Socket** 1. **Java HTTP客户端**:Java内置的HttpURLConnection或第三方库如Apache HttpClient可以用来发送HTTP请求和处理响应。 2. **Java Socket编程**:使用java.net.Socket和ServerSocket类,...
在IT行业中,网络通信是至关重要的部分,...开发者需要理解Socket的工作原理,掌握XML的解析和序列化,以及如何设计和遵循通信协议。通过这样的练习,不仅可以提升网络编程技能,还能加深对数据交换和网络通信的理解。
总结,Socket服务器和客户端是网络通信的基础,理解其工作原理和实现方式对于开发分布式应用至关重要。无论是在桌面应用如WPF,还是在Web服务中,Socket都能提供强大的数据传输能力。通过不断学习和实践,开发者可以...
Socket编程是计算机网络通信中的重要技术,主要负责在不同设备之间建立连接并交换数据。C++作为一门强大的编程语言,...通过阅读和分析`SocketTest`项目中的代码,可以加深对Socket编程的理解,提升自己的编程能力。