• 35648

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

网络编程之模拟BS结构

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/0824/108403.html 1190000020166727

package com.itheima.demo04.BSTCP;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/*

创建BS版本TCP服务器

*/
public class TCPServer {

public static void main(String[] args) throws IOException {
    //创建一个服务器ServerSocket,和系统要指定的端口号
    ServerSocket server = new ServerSocket(8080);
    //使用accept方法获取到请求的客户端对象(浏览器)
    Socket socket = server.accept();
    //使用Socket对象中的方法getInputStream,获取到网络字节输入流InputStream对象
    InputStream is = socket.getInputStream();
    //使用网络字节输入流InputStream对象中的方法read读取客户端的请求信息
    /*byte[] bytes = new byte[1024];
    int len = 0;
    while((len = is.read(bytes))!=-1){
        System.out.println(new String(bytes,0,len));
    }*/

    //把is网络字节输入流对象,转换为字符缓冲输入流
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    //把客户端请求信息的第一行读取出来 GET /11_Net/web/index.html HTTP/1.1
    String line = br.readLine();
    //把读取的信息进行切割,只要中间部分 /11_Net/web/index.html
    String[] arr = line.split(" ");
    //把路径前边的/去掉,进行截取 11_Net/web/index.html
    String htmlpath = arr[1].substring(1);

    //创建一个本地字节输入流,构造方法中绑定要读取的html路径
    FileInputStream fis = new FileInputStream(htmlpath);
    //使用Socket中的方法getOutputStream获取网络字节输出流OutputStream对象
    OutputStream os = socket.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());

    //一读一写复制文件,把服务读取的html文件回写到客户端
    int len = 0;
    byte[] bytes = new byte[1024];
    while((len = fis.read(bytes))!=-1){
        os.write(bytes,0,len);
    }

    //释放资源
    fis.close();
    socket.close();
    server.close();
}

}
package com.itheima.demo04.BSTCP;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/*

创建BS版本TCP服务器

*/
public class TCPServerThread {

public static void main(String[] args) throws IOException {
    //创建一个服务器ServerSocket,和系统要指定的端口号
    ServerSocket server = new ServerSocket(8080);

    /*
        浏览器解析服务器回写的html页面,页面中如果有图片,那么浏览器就会单独的开启一个线程,读取服务器的图片
        我们就的让服务器一直处于监听状态,客户端请求一次,服务器就回写一次
     */
    while(true){
        //使用accept方法获取到请求的客户端对象(浏览器)
        Socket socket = server.accept();

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //使用Socket对象中的方法getInputStream,获取到网络字节输入流InputStream对象
                    InputStream is = socket.getInputStream();
                    //使用网络字节输入流InputStream对象中的方法read读取客户端的请求信息
                    /*byte[] bytes = new byte[1024];
                    int len = 0;
                    while((len = is.read(bytes))!=-1){
                        System.out.println(new String(bytes,0,len));
                    }*/

                    //把is网络字节输入流对象,转换为字符缓冲输入流
                    BufferedReader br = new BufferedReader(new InputStreamReader(is));
                    //把客户端请求信息的第一行读取出来 GET /11_Net/web/index.html HTTP/1.1
                    String line = br.readLine();
                    System.out.println(line);
                    //把读取的信息进行切割,只要中间部分 /11_Net/web/index.html
                    String[] arr = line.split(" ");
                    //把路径前边的/去掉,进行截取 11_Net/web/index.html
                    String htmlpath = arr[1].substring(1);

                    //创建一个本地字节输入流,构造方法中绑定要读取的html路径
                    FileInputStream fis = new FileInputStream(htmlpath);
                    //使用Socket中的方法getOutputStream获取网络字节输出流OutputStream对象
                    OutputStream os = socket.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());

                    //一读一写复制文件,把服务读取的html文件回写到客户端
                    int len = 0;
                    byte[] bytes = new byte[1024];
                    while((len = fis.read(bytes))!=-1){
                        os.write(bytes,0,len);
                    }

                    //释放资源
                    fis.close();
                    socket.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }).start();


    }


    //server.close();
}

}

相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!