博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java网络编程客户端与服务端原理以及用URL解析HTTP协议
阅读量:4948 次
发布时间:2019-06-11

本文共 4372 字,大约阅读时间需要 14 分钟。

常见客户端与服务端

  客户端:

    浏览器:IE

  服务端:

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

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

服务端原理

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

  

1 package cn.ie_server; 2  3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.PrintWriter; 6 import java.net.InetSocketAddress; 7 import java.net.ServerSocket; 8 import java.net.Socket; 9 10 import cn.InetAdress.demo.InetAddressDemo2;11 12 public class MyTomcat {13 14     public static void main(String[] args) throws IOException {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

 

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

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

 

客户端原理

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

1 package cn.ie_server; 2  3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.ObjectInputStream.GetField; 6 import java.io.PrintWriter; 7 import java.net.Socket; 8 import java.net.UnknownHostException; 9 10 public class MyBrowser {11 12     /**13      * @param args14      * @throws IOException 15      * @throws UnknownHostException 16      */17     public static void main(String[] args) throws UnknownHostException, 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
//空行
//应答体

<html>

<head>
<title>这是我的网页</title>
</head>
<body>
<h1>欢迎光临</h1>
<font size='5' color="red">这是一个Tomcat服务器中的资源。这是一个html网页。</font>
</body>
</html>

 

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

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

1 package cn.ie_server; 2  3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.MalformedURLException; 7 import java.net.URL; 8 import java.net.URLConnection; 9 10 public class URLDemo {11 12     /**13      * @param args14      * @throws IOException 15      */16     public static void main(String[] args) throws IOException {17         String str_url="http://127.0.0.1:8080/myweb/1.html?name=zhangsan";18         19         URL url=new URL(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 }

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

转载于:https://www.cnblogs.com/Liang-Blog/p/5643282.html

你可能感兴趣的文章
kubelet Pod status的状态分析
查看>>
常见错误: 创建 WCF RIA Services 类库后, 访问数据库出错
查看>>
对Javascript面向对象的理解
查看>>
已知一个日期和天数, 求多少天后的日期(是那个超时代码的AC版)
查看>>
CAS 逻辑流程图
查看>>
hyperopt中文文档:Scipy2013
查看>>
testng+IEDriverServer+yum+tomcat下载软件包
查看>>
perl6 Net::HTTP 不能发送https请求
查看>>
python 远程 部署和运行
查看>>
hihocoder 第一周 最长回文字串
查看>>
MongoDB学习day02--数据库增删改查
查看>>
spoj705 后缀数组求不同子串的个数
查看>>
KMP算法的一点学习笔记
查看>>
分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)
查看>>
localStorage 杂记
查看>>
字符串的求和
查看>>
大功率电池充放电保护器的设计和制作
查看>>
linux sar命令详解
查看>>
Linux 配置Samba服务器
查看>>
Java 继承
查看>>