A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class ServerRunnable implements Runnable {
        //定义Socket对象,用于在构造方法中接受对应的Socket对象
        private Socket socket;
        public ServerRunnable(Socket socket){
                this.socket=socket;
        }
       
        //重写该线程执行目标的run方法
        @Override
        public void run() {
        try{
                //客户端输入字节流包装为字符输入流,方便读取客户端请求消息
BufferedReader bfr = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
                        //读取客户端请求消息头,包括请求方式  协议版本  请求路径
                        String line = bfr.readLine();
                        //按照1-N个空格方式切割请求消息头,直接获取请求路径
                        String[] str = line.split(" +");
                        //数组索引1是请求路径, 调用substring去掉路径开始的 斜杠(/)
                        String path = str[1].substring(1);
                        //将客户端请求的路径封装为服务器端的File对象
                        File file = new File(path);
                        //字节流读取客户端请求的服务器端的文件
                        FileInputStream fis = new FileInputStream(file);
                        //获取Socket输出流,用于为客户端响应
                        OutputStream out = socket.getOutputStream();
                        //输出http响应头,否则有些浏览器会将html解析为普通文本,没有网页的效果了
                        out.write("HTTP/1.1 200 OK\r\n".getBytes());
                        out.write("Server: Apache-Tomcat\r\n".getBytes());
                        out.write(("Date: "+new Date().toString()+"\r\n").getBytes());
                        //输出消息头和html正文之间的空行
                        out.write("\r\n".getBytes());  
                        //请求的html文件,响应给客户端浏览器
                        byte[] bytes = new byte[1024];
                        int len = 0 ;
                        while((len = fis.read(bytes))!=-1){
                                out.write(bytes, 0, len);
                        }
                        socket.close();
        } catch (Exception ex){
                ex.printStackTrace();
        }
        }
}

完成服务器端代码
public class WebServer {
        public static void main(String[] args) throws Exception{
                //创建线程池提供线程
                ExecutorService threadPool = Executors.newFixedThreadPool(50);
                //创建ServerSocket服务,监听8080端口
                ServerSocket server = new ServerSocket(8080);
                while(true){
                        //获取客户端连接
                        Socket s = server.accept();
                        //分配线程提交任务执行
                        threadPool.submit(new ServerRunnable(s));
                }
        }
}

评分

参与人数 3黑马币 +29 收起 理由
weishixiong + 9 很给力!
CR7 + 10 很给力!
and2long + 10 很给力!

查看全部评分

2 个回复

倒序浏览
注释很详细,学习了...
回复 使用道具 举报
666666666666666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马