##如何根据一个端口号,建立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(); } }