##如何根据一个端口号,建立BS架构,在网页中打开我们要想的网站

关于这个简单的小项目,我们可能会用到的知识点:

  IO流

  网络编程

  多线程

  对象的创建,循环等等

public class BSTCPServer {
    public static void main(String[] args) throws IOException{
        //1   创建服务器对象ServerSocket  系统的端口号指定   10800
        ServerSocket server = new ServerSocket(10800);
        //2  使用ServerSocket  对象中的方法accept();   监听并获取请求的客户端Socketd对象(浏览器)
        Socket socket = server.accept();
        // 3   使用Socket对象中的方法  getInputStream 获取网络字节输入流  InputStream对象
        InputStream is = socket.getInputStream();
        //4 读取客户端请求的信息
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        System.out.println(new String(bytes,0,len));
        //  把网络字节输入流    转为网络字符缓冲流
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        //读取 客户请求信息的第一行  包含了页面的地址
        String line = br.readLine();
       // System.out.println(line);
        // 切割字符串    split(" ");
        String[] arr = line.split(" ");
        System.out.println(arr[1]);
        //  截取  字符串    substring
        String path = arr[1].substring(1);
        System.out.println(path);//  路径
        //创建本地字节输入流      缓冲流进行包装一下     提高效率
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
        //  获取网络字节输出流  (缓冲流)
        BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
        //  使用BufferedInputStream ---》read读取html 文件
        //  告诉客户端  写的是一个html 文件

        bos.write("HTTP/1.1 200 OK\r\n".getBytes());
        bos.write("Content-Type:text/html\r\n".getBytes());
        bos.write("\r\n".getBytes());

        int len  = 0 ;
        while ((len  = bis.read())!=-1){
            //使用BufferedOutputStream---》write把读取到了html文件  写到客户端显示
            bos.write(len);
        }
        //释放资源
        bos.close();
        bis.close();
        socket.close();
        server.close();
    }
}

 

posted @ 2019-06-04 10:44  阿锐互联网  阅读(565)  评论(0编辑  收藏  举报