package cn.kgc.progect;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;/*** @author * 创建TCP程序 BS版本的服务器*/
public class BSTCPServer {public static void main(String[] args) throws IOException{//1 创建服务器对象ServerSocket 系统的端口号指定 10800ServerSocket server = new ServerSocket(8080);while(true){//2 使用ServerSocket 对象中的方法accept(); 监听并获取请求的客户端Socketd对象(浏览器)Socket socket = server.accept();new Thread(new Runnable() {@Overridepublic void run() {try {// 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]);// 截取 字符串 substringString 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();} catch (IOException e) {e.printStackTrace();}}}).start();}// server.close();}
}