用Socket类实现HTTP协议客户端应用

Http客户端程序已集成在Java语言中,可以通过URLConnection类调用。遗憾的是,由于SUN没有公布Http客户程序的源码,它实现的细节仍是一个谜。本文根据HTTP协议规范,用Java.net.Socket类实现一个HTTP协议客户端程序。

1.Socket类:

了解TCP/IP协议集通信的读者知道,协议间的通信是通过Socket完成的。在Java.net包中,Socket类就是对Socket的具体实现。它通过连接到主机后,返回一个I/O流,实现协议间的信息交换。

2 . HTTP协议

HTTP协议同其它TCP/IP协议集中的协议一样,是遵循客户/服务器模型工作的。客户端发往服务端的信息格式如下:

请求方法 URL HTTP协议的版本号

提交的元信息

**空行**

实体

请求方法是对这次连接工作的说明,目前HTTP协议已经发展到1.1版,它包括GET、HEAD、POST、DELETE、OPTIONS、TRACE、PUT七种。元信息是关于当前请求的信息。通过分析元信息,可以检查实体数据是否完整,接收过程是否出错,类型是否匹配等。元信息的引入使HTTP协议通信更加稳妥可靠。实体是请求的具体内容。

将上述报文发往Web服务器,如果成功,应答格式如下:

HTTP协议的版本号 应答状态码 应答状态码说明

接收的元信息

**空行**

实体

以上报文发向客户端,并且接收成功,彼此间关闭连接,完成一次握手。下面用最常用的GET方法,来说明具体的报文应用:

GET http://www.youhost.com HTTP/1.0
accept: www/source; text/html; image/gif; image/jpeg; */*
User_Agent: myAgent
**空行**

这个报文是向www.youhost.com主机请求一个缺省HTML文档。客户端HTTP协议版本号是1.0版,元信息包括可接收的文件格式,用户代理,每一段之间用回车换行符分隔,最后以一个空行结束。发向服务器后,如果执行过程正常,服务器返回以下代码:

HTTP/1.1 200 OK

Date: Tue, 14 Sep 1999 02:19:57 GMT

Server: Apache/1.2.6

Connection: close

Content-Type: text/html

**空行**

<html><head>...</head><body>...</body></html>

HTTP/1.1表示这个HTTP服务器是1.1版,200是服务器对客户请求的应答状态码,OK是对应答状态码的解释,之后是这个文档的元信息和文档正文。(相关应答状态码和元信息的解释请参阅Inetrnet标准草案:RFC2616)。

时间: 2024-11-03 21:06:38

用Socket类实现HTTP协议客户端应用的相关文章

java使用Socket类接收和发送数据_java

网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类.通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据.在本文及后面的数篇文章中将详细讨论Socket类的使用,内容包括Socket类基础.各式各样的连接方式.get和set方法.连接过程中的超时以及关闭网络连接等. 在本文中,我们将讨论使用Socket类的基本步骤和方法.一般网络客户端程序在连接服务程序时要进行以下三步操作. 连接服务器 发送和接收数据 关闭网络连接 一.连接服务器 在

Java网络编程从入门到精通(13):使用Socket类接收和发送数据

网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类.通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据.在本文及后面的数篇文章中将详细讨论Socket类的使用,内容包括Socket类基础.各式各样的连接方式.get和set方法.连接过程中的超时以及关闭网络连接等. 在本文中,我们将讨论使用Socket类的基本步骤和方法.一般网络客户端程序在连接服务程序时要进行以下三步操作. 1.连接服务器 2.发送和接收数据 3.关闭网络连接 一.连

socket系列之客户端socket——Socket类

假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含很多方法用于建立连接,操作数据流等.客户端按以下几步进行工作:① 创建一个Socket实例,构造函数直接指定远程服务器IP跟端口,建立一个TCP连接.② 通过这个Socket实例的输入输出流进行通信,Socket实例都包含一个InputStream对象和OutputStream对象,通过操作这些流就

《深入剖析Tomcat》一1.2 Socket类

1.2 Socket类 套接字是网络连接的端点.套接字使应用程序可以从网络中读取数据,可以向网络中写入数据.不同计算机上的两个应用程序可以通过连接发送或接收字节流,以此达到相互通信的目的.为了从一个应用程序向另一个应用程序发送消息,需要知道另一个应用程序中套接字的IP地址和端口号.在Java中,套接字由java.net.Socket表示. 要创建一个套接字,可以使用Socket类中众多构造函数中的一个.其中一个构造函数接收两个参数:主机名和端口号. public Socket (java.lan

java网络编程之socket网络编程示例(服务器端/客户端)_java

Java为TCP协议提供了两个类,分别在客户端编程和服务器端编程中使用它们.在应用程序开始通信之前,需要先创建一个连接,由客户端程序发起:而服务器端的程序需要一直监听着主机的特定端口号,等待客户端的连接.在客户端中我们只需要使用Socket实例,而服务端要同时处理ServerSocket实例和Socket实例;二者并且都使用OutputStream和InpuStream来发送和接收数据. 学习一种知识最好的方式就是使用它,通过前面的笔记,我们已经知道如何获取主机的地址信息,现在我们通过一个简单的

Socket开发框架之数据传输协议

我在前面一篇随笔<Socket开发框架之框架设计及分析>中,介绍了整个Socket开发框架的总体思路,对各个层次的基类进行了一些总结和抽象,已达到重用.简化代码的目的.本篇继续分析其中重要的协议设计部分,对其中消息协议的设计,以及数据的拆包和封包进行了相关的介绍,使得我们在更高级别上更好利用Socket的特性. 1.协议设计思路 对Socket传输消息的封装和拆包,一般的Socket应用,多数采用基于顺序位置和字节长度的方式来确定相关的内容,这样的处理方式可以很好减少数据大小,但是这些处理对我

用Socket类构建网页下载器

网页|下载 用Socket类构建网页下载器 屠恩海(SunHai) 开发工具:Microsoft Visual Studio .NET 2003 操作系统:Windows XP 什么时候用到Socket类 Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序.所谓"分层",可以视为包含3个层次:请求/响应层.应用协议

Java语言的Socket类

当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个socket对象,Socket类有几个构造函数.两个常用的构造函数是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字.对于第一个InetAddress子类对象通过addr参数获得服务器主机的IP地址,对于第二个函数host参数包被分配到InetAddress对象中,如果没有IP

Java网络编程基础(二) Socket类的使用方法

当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个socket对象,Socket类有几个构造函数. 两个常用的构造函数是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字.对于第一个InetAddress子类对象通过addr参数获得服务器主机的IP地址,对于第二个函数host参数包被分配到InetAddress对象中,如果没有I