IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> BS版本TCP服务器 -> 正文阅读

[网络协议]BS版本TCP服务器

/*
创建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();
}

}
/*
创建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();
}

}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-14 14:29:09  更:2021-08-14 14:32:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:16:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码