模拟BS服务器分析

模拟网站服务器,使用浏览器访问自己编写的服务端程序,查看网页效果.

服务器要给客户端回写一个信息,回写一个html页面(文件)我们需要读取index.html文件,就必须的知道这个文件的地址?
而这个地址就是请求信息的第一行GET /11_Net/web/index.html HTTP/1.1
可以使用BufferedReader中的方法readLine读取一行InputStream is = socket.getInputStream( );new BufferedReader(new InputStreamReader(is));把网络字节输入流,转为字符缓冲输入流
GET /11_Net/web/index.html HTTP/1.1
可以使用String类的方法split("")切割字符串,获取中间的部分
arr[1]/11_Net/web/index.html
使用String类的方法substring(1),获取html文件的路径11_Net/web/index.html
服务器创建一个本地的字节输入流根据获取到文件路径,读取html文件//写入HTTP协议响应头,固定写法
out.write("HTTP/1.1690 oK irin".getBytes());
out.write("content-Type :text/html\rin" .getBytes( ));//必须要写入空行,否则浏览器不解析
out.write("lrin".getBytes());
服务器端使用网络字节输出流把读取到的文件,写到客户端(浏览器)显示

模拟BSch服务器代码实现

实现步骤:

1.将已存在的静态页面对象放在 项目下
2.创建server套接字
3.实现服务器一直开启的状态
4.开启多线程技术,提高效率

 //创建服务器ServerSocket对象
ServerSocket server = new ServerSocket(8080);
while (true){
//使用accept获取Socket
Socket sc = server.accept(); new Thread(new Runnable() {
@Override
public void run() {
try {
//获取InputStream网络字节输入流
InputStream is = sc.getInputStream(); if (is != null) {
//创建缓冲流 , 转换为字符缓冲输入流
BufferedReader bw = new BufferedReader(new InputStreamReader(is));
//GET /IOTest/web/index.html HTTP/1.1
String line;
line = bw.readLine();
//分割路劲
String[] path = line.split(" ");
//获取路径 IOTest/web/index.html
String filename = path[1].substring(1); //filename = IOTest/web/index.html
System.out.println("filename:" + filename);
//创建本地字节输入流 FileInputStream
FileInputStream fis = new FileInputStream(filename); OutputStream os = sc.getOutputStream(); //写入Http响应
os.write("HTTP/1.1 200 OK\r\n".getBytes());
os.write("Content-Type:text/html\r\n".getBytes());
//必须要写入空行,否则浏览器不解析
os.write("\r\n".getBytes());
//一读一写浏览器 int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
//写入服务器
os.write(bytes, 0, len);
}
fis.close();
sc.close();
} } catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}

模拟BS服务器分析-模拟BS服务器代码实现的更多相关文章

  1. 自己动手模拟开发一个简单的Web服务器

    开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...

  2. 自己模拟的一个简单的web服务器

    首先我为大家推荐一本书:How Tomcat Works.这本书讲的很详细的,虽然实际开发中我们并不会自己去写一个tomcat,但是对于了解Tomcat是如何工作的还是很有必要的. Servlet容器 ...

  3. atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener

    atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener 1. 自定义web服务器的实现方案,基于原始socket vs   ...

  4. c# 模拟POST上传文件到服务器

    using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...

  5. NodeJs本地搭建服务器,模拟接口请求,获取json数据

    最近在学习Node.js,虽然就感觉学了点皮毛,感觉这个语言还不错,并且也会一步步慢慢的学着的,这里实现下NodeJs本地搭建服务器,模拟接口请求,获取json数据. 具体的使用我就不写了,这个博客写 ...

  6. 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程

    [前提] 想要实现使用某种语言,比如Python,C#等,去实现模拟登陆网站的话,首先要做的事情就是使用某种工具,去分析本身使用浏览器去登陆网页的时候,其内部的执行过程,内部逻辑. 此登陆的逻辑过程, ...

  7. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView

    本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...

  8. Netty实现高性能IOT服务器(Groza)之精尽代码篇中

    运行环境: JDK 8+ Maven 3.0+ Redis 技术栈: SpringBoot 2.0+ Redis (Lettuce客户端,RedisTemplate模板方法) Netty 4.1+ M ...

  9. linux服务器分析优化

    转:http://jiekeyang.blog.51cto.com/11144634/1774473 一.系统性能分析 1.系统的性能是指操作系统完成任务的有效性.稳定性和响应速度.操作系统完成任务与 ...

随机推荐

  1. 如何解读Linux Kernel OOPS信息

    OOPS信息解读 root@firefly:~/mnt/module# insmod oops_module.ko [ 867.140514] Unable to handle kernel NULL ...

  2. 云原生之旅 - 11)基于 Kubernetes 动态伸缩 Jenkins Build Agents

    前言 上一篇文章 云原生之旅 - 10)手把手教你安装 Jenkins on Kubernetes 我们介绍了在 Kubernetes 上安装 Jenkins,本文介绍下如何设置k8s pod作为Je ...

  3. go mod常用命令 已经 常见问题

    最近接触到go mod,网上查了查资料,这里记录一下. 1 介绍 1.1.go mod是什么 go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地 ...

  4. Window使用PowerShell改文件时间戳

    We cross infinity with every step; we meet eternity in every second. 我们每一步都跨过无穷,每一秒都遇见永恒. Window使用Po ...

  5. php中的try语句

    为了进一步处理异常,我们需要使用try-catch语句----包括Try语句和至少一个的catch语句.任何调用 可能抛出异常的方法的代码都应该使用try语句.Catch语句用来处理可能抛出的异常.以 ...

  6. easui 两个combobox相互选中时至对方为空的解决方案

    combobox HTML: <select id="monthplan" class="zxui-combobox" name="monthp ...

  7. Springboot整合thymeleaf报错whitelabel page

    1.SpringBootApplication未放在最外层 2.application.properties未配置spring.thymeleaf.check-template-location=tr ...

  8. 数电第二周总结_by_yc

    数电第二周总结_CC 重点: 模块实例化.仿真测试.数值表示.参数.表达式. 模块实例化端口连接方法: A.顺序端口连接:需严格按照模块定义时的顺序 B.明明端口连接:对端口信号顺序不做要求 Ex-1 ...

  9. Zabbix与乐维监控对比分析(二)——Agent管理、自动发现、权限管理

    上期我们详细介绍了Zabbix与乐维监控的架构与性能对比分析,透过架构与性能对比分析,用户可以对乐维监控之所以能成为"Zabbix企业版"有一个初步的认知.本篇是Zabbix对比乐 ...

  10. 数据科学家赚多少?基于pandasql和plotly的薪资分析与可视化 ⛵

    作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 AI 岗位&攻略系列:https://www.showmeai. ...