模拟BS服务器分析-模拟BS服务器代码实现
作者:互联网
模拟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(); }
标签:index,web,BS,write,html,new,服务器,模拟 来源: https://www.cnblogs.com/leijia/p/16478552.html