和请求类似,一个http响应也包含三个部分:
协议状态 代码描叙(protocol-status code-description)
响应包头(response headers)
实体(entity body)
下面是http响应的一个简单范例:
http/1.1 200 ok
server: microsoft-iis/4.0
date: mon, 3 jan 1998 13:13:33 gmt
content-type: text/html
last-modified: mon, 11 jan 1998 13:23:42 gmt
content-length: 112
<html>
<head>
<title>http response example</title></head><body>
welcome to brainy software
</body>
</html>
第一行的响应包头和上面的请求包头很相似。 第一行告诉我们,协议是使用的http1.1,响应请求已成功(200表示成功),一切已ok。
响应包头和请求包头相似,也包含一些有用的信息。响应的实体是html那一部分的内容。包头和实体也都是被crlf序列分离开的。
socket类
套接字(socket)是网络连接的一个端点。它使得应用程序能够通过网络进行读和写的操作。 通过在连接上发送和接受字节流,两个位于不同计算机的软件程序能够彼此相互通讯。为了发送一个消息到另一个程序,你需要知道对方机器的ip地址和socket端口号。在java中,一个socket是由java.net.socket类所表示的。
为了创建一个套接字,你可以使用socket类的构造函数来完成。 这些构造函数接受主机名和端口:
public socket(string host, int port)
host表示远程计算机名或者ip地址,port表示该远程应用的端口号。比如,要在80端口连接到yahoo.com,你需要构造下面的socket:
new socket("yahoo.com", 80);
一旦你成功创建了一个socket类的实例,就可以使用它来发送和接受字节流了。 要发送字节流,必须首先调用socket类的getoutputstream 方法来获得一个java.io.outputstream对象。要发送一个文本到远程应用程序,经常要构造一个从outputstream对象返回的java.io.printwriter对象。要接收连接另一端的字节流,要调用socket类的getinputstream方法,该方法是从 java.io.inputstream返回的。
下面的程序段创建了一个socket,和本地http服务器(127.0.0.1代表本地)进行通讯,发送一个http请求,然后从服务器接收一个响应。它创建了一个stringbuffer 来保存响应,并将它打印到控制台。
socket socket = new socket("127.0.0.1", "8080");
outputstream os = socket.getoutputstream();
boolean autoflush = true;
printwriter out = new printwriter( socket.getoutputstream(), autoflush );
bufferedreader in = new bufferedreader(
new inputstreamreader( socket.getinputstream() ));
// send an http request to the web server
out.println("get /index.jsp http/1.1");
out.println("host: localhost:8080");
out.println("connection: close");
out.println();
// read the response
boolean loop = true;
stringbuffer sb = new stringbuffer(8096);
while (loop) {
if ( in.ready() ) {
int i=0;
while (i!=-1) {
i = in.read();
sb.append((char) i);
}
loop = false;
}
thread.currentthread().sleep(50);
}
// display the response to the out console
system.out.println(sb.tostring());
socket.close();
要从服务器得到一个确切的响应,你需要发送一个遵循http协议规则的http请求。如果你阅读了上面的那段"超文本传输协议(http)" ,那么你就应该能够理解刚才上面建立socket的代码。
新闻热点
疑难解答