java http 客户端 服务端_java网络编程客户端与服务端原理以及用URL解析HTTP协议...

常见客户端与服务端

客户端:

浏览器:IE

服务端:

服务器:web服务器(Tomcat),存储服务器,数据库服务器。

(注:会用到Tomact服务器,在webapps下有一个自己创建的目录myweb,下面有一个文件1.html)

d030831c4702b9c7aa18a1eb999bc551.png

服务端原理

自定义一个服务端,使用自己已有的客户端IE浏览器,了解一下客户端都发送了什么请求。

1 packagecn.ie_server;2

3 importjava.io.IOException;4 importjava.io.InputStream;5 importjava.io.PrintWriter;6 importjava.net.InetSocketAddress;7 importjava.net.ServerSocket;8 importjava.net.Socket;9

10 importcn.InetAdress.demo.InetAddressDemo2;11

12 public classMyTomcat {13

14 public static void main(String[] args) throwsIOException {15 //建立服务端的socket连接,监听9090端口

16 ServerSocket ss=new ServerSocket(9090);17 //接收客户端发来的消息

18 Socket s=ss.accept();19

20 System.out.println(s.getInetAddress().getHostAddress());21

22 //获取客户端发送过来的请求

23 InputStream in=s.getInputStream();24

25 byte [] buf=new byte[1024];26

27 int len=in.read(buf);28

29 String text=new String(buf,0,len,"utf-8");30

31 System.out.println(text);32 //向客户端发送一些数据

33 PrintWriter out=new PrintWriter(s.getOutputStream(),true);34 out.println("欢迎光临");35 s.close();36 ss.close();37 }38 }

发送过来的请求是:

GET / HTTP/1.1 (请求行: 请求方式 请求资源路径/myweb/1.html http协议版本)

(请求消息头,属性名:属性值 )

Accept: text/html, application/xhtml+xml, image/jxr, */*

Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)   Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586

(支持的压缩方式)

Accept-Encoding: gzip, deflate

Host: 127.0.0.1:9090

Connection: Keep-Alive8

注意:这此时开放端口后可能会连不上服务端出现以下情况

b9a9ffbcfe8fb207bb1d594f2f7d9bc9.png

此时可以试一下将ip换成127.0.0.1 这个回送地址,因为如果在校园会出现访问限制的情况

客户端原理

服务端给客户端的应答消息,模拟一个Tomcat服务端发送符合http协议的请求消息

1 packagecn.ie_server;2

3 importjava.io.IOException;4 importjava.io.InputStream;5 importjava.io.ObjectInputStream.GetField;6 importjava.io.PrintWriter;7 importjava.net.Socket;8 importjava.net.UnknownHostException;9

10 public classMyBrowser {11

12 /**

13 *@paramargs14 *@throwsIOException15 *@throwsUnknownHostException16 */

17 public static void main(String[] args) throwsUnknownHostException, IOException {18 Socket s=new Socket("192.168.1.127",8080);19

20 //模拟浏览器给tomcat服务端发送符合http协议的请求消息

21 PrintWriter out=new PrintWriter(s.getOutputStream(),true);22 out.println("GET /docs/aio.html HTTP/1.1");23 out.println("Accept: */*");24 out.println("Host: 192.168.1.127:8080");25 out.println("Connection:close");26 out.println();27 out.println();28

29 InputStream in=s.getInputStream();30 byte[] buf=new byte[1024];31 int len=in.read(buf);32

33 String str=new String(buf,0,len);34 System.out.println(str);35

36 s.close();37

38 }39

40 }

服务端返回的应答消息为:

(应答行 应答状态码 应答状态行描述信息)

HTTP/1.1 200 OK

(应答消息属性 属性名:属性值 )

Server: Apache-Coyote/1.1

Accept-Ranges: bytes

ETag: W/"24874-1465990848000"

Last-Modified: Wed, 15 Jun 2016 11:40:48 GMT//最后修改时间

Content-Type: text/html

Content-Length: 24874

Date: Mon, 04 Jul 2016 14:54:43 GMT

Connection: close

//空行

//应答体

这是我的网页

欢迎光临

这是一个Tomcat服务器中的资源。这是一个html网页。

注意:通常我们找不到网页,会出现404的应答状态码,而成功的话会返回200的应答状态码。

大家可以看到服务端返回的消息中有“应答行 应答状态码 应答状态行描述信息”等等一系列信息,但为什么在浏览器中只有我们看到的普通网页呢,这是因为浏览器进行了解析,但是怎么解析呢?只是就用到了URL这个类。

1 packagecn.ie_server;2

3 importjava.io.IOException;4 importjava.io.InputStream;5 importjava.io.OutputStream;6 importjava.net.MalformedURLException;7 importjava.net.URL;8 importjava.net.URLConnection;9

10 public classURLDemo {11

12 /**

13 *@paramargs14 *@throwsIOException15 */

16 public static void main(String[] args) throwsIOException {17 String str_url="http://127.0.0.1:8080/myweb/1.html?name=zhangsan";18

19 URL url=newURL(str_url);20 InputStream in=url.openStream();21 byte[]buf=new byte[1024];22 int len =in.read(buf);23 String text=new String(buf ,0,len);24 System.out.println(text);25 in.close();26 }27

28 }

整理的有些粗糙,大家多提一下建议哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值