TCP-模拟BS架构通信

news2024/11/15 15:51:24

简介

  • bs是通过浏览器进行访问的
  • 每次访问都会开启一个短期的socket用来访问服务器的资源

在这里插入图片描述

响应报文的格式

在这里插入图片描述

服务端

bs架构中的b是浏览器,不需要我们书写,我们只需要书写服务端即可

服务端

public class Server {
    public static void main(String[] args) {
        System.out.println("服务启动成功!");
        //1. 创建一个ServerSocket对象
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(8888);
            //2. 服务端一直处于监听状态,等待客户端的连接
            while (true) {
                //accept()方法是一个阻塞方法,会一直等待客户端的连接
                new ServerReaderThread(serverSocket.accept()).start();
                System.out.println("有新的客户端连接上来了!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

服务端读取线程

public class ServerReaderThread extends Thread {

    private Socket socket;

    public ServerReaderThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {

        try (
                OutputStream outputStream = socket.getOutputStream();
                // 打印流更容易打印数据
                PrintStream printStream = new PrintStream(outputStream);
        ) {
            while (true) {
               printStream.println("HTTP/1.1 200 OK");
                printStream.println("Content-Type: text/html; charset=utf-8");
                // 必须要有空行
                printStream.println();
                printStream.println("<h1>hello world</h1>");
                socket.close(); // 关闭socket
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用线程池优化一下

  • 如果有一万个请求,那就有一万个线程,服务器绝壁挂机
  • 使用线程池优化一下

在这里插入图片描述

服务器端

public class Server {
    public static void main(String[] args) {
        System.out.println("服务启动成功!");
        //1. 创建一个ServerSocket对象
        ServerSocket serverSocket = null;

        // 创建一个线程池
        ThreadPoolExecutor pool = new ThreadPoolExecutor(8 + 1, 8 * 2, 10, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(8), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());

        try {
            serverSocket = new ServerSocket(8888);
            //2. 服务端一直处于监听状态,等待客户端的连接
            while (true) {
                //accept()方法是一个阻塞方法,会一直等待客户端的连接
                pool.execute(new ServerReaderThread(serverSocket.accept()));
                System.out.println("有新的客户端连接上来了!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1630867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Centos7 RPM包离线安装Nginx

查看是否安装nginx #使用命令 rpm -qa|grep 列出需要卸载的软件包 rpm -qa | grep nginx 卸载nginx #使用rpm -e 加包名删除 rpm -e nginx-release-centos-7-0.el7.ngx.noarch nginx-1.14.1-1.el7_4.ngx.x86_64 rpm -e nginx 安装nginx 其他版本步骤一样 下载rpm包In…

stm32的GPIO基本结构

1.带FT标号的引脚能容忍5V 2.GPIO系统架构 stm32的所有GPIO都是挂载在APB2总线上的 3.GPIO的基本结构 在上图中&#xff0c;左边就是寄存器&#xff0c;右边就是驱动器了 保护二极管的作用&#xff1a;VDD表示3.3V&#xff0c;如果输入的电压的值大于3.3V&#xff0c;那么这个…

融入本土文化:Kompas.ai助力跨境品牌本地化营销

在全球化的商业环境中&#xff0c;跨境品牌面临着将其产品和服务适应不同文化和市场的挑战。本地化营销是品牌国际化战略的关键组成部分&#xff0c;它要求品牌不仅要传递其核心价值&#xff0c;还要尊重并融入目标市场的文化特色。本文将深入探讨跨境品牌在本地化营销中面临的…

知网怎么查重 知网查重的详细步骤

知网查重八个步骤&#xff1a;1. 访问官网&#xff0c;注册账号。2. 上传待查文档。3. 选择查重规则。4. 选择相似来源库。5. 提交查重任务。6. 等待查重结果。7. 获取查重报告。8. 下载查重报告。 知网查重的详细步骤 第一步&#xff1a;进入知网查重系统 打开浏览器&#x…

数据污染对大型语言模型的潜在影响

大型语言模型&#xff08;LLMs&#xff09;中存在的数据污染是一个重要问题&#xff0c;可能会影响它们在各种任务中的表现。这指的是LLMs的训练数据中包含了来自下游任务的测试数据。解决数据污染问题至关重要&#xff0c;因为它可能导致结果偏倚&#xff0c;并影响LLMs在其他…

【EI会议|投稿优惠】2024年机械应用与能源动力国际会议(ICMAEP 2024)

2024 International Conference on Mechanical Applications and Energy Power 一、大会信息 会议名称&#xff1a;2024年机械应用与能源动力国际会议 会议简称&#xff1a;ICMAEP 2024 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等 会议官网&#xff1a;…

应用实战 | 别踩白块小游戏,邀请大家来PK挑战~

“踩白块会输”是一个简单的微信小程序游戏&#xff0c;灵感来自当年火热的别踩白块游戏&#xff0c;程序内分成三个模块&#xff1a;手残模式、经典模式和极速模式&#xff0c;分别对应由易到难的三种玩法&#xff0c;可以查看游戏排名。动画效果采用JS实现&#xff0c;小程序…

CDP客户数据平台:构建S2B2C智能名片商城的核心引擎

在数字化浪潮席卷之下&#xff0c;企业对于客户数据的整合与利用已不再是单纯的竞争优势&#xff0c;而是关乎生存与发展的必要条件。CDP&#xff08;Customer Data Platform&#xff09;客户数据平台&#xff0c;以其统一且持续可访问的特性&#xff0c;正成为S2B2C AI智能名片…

JAVA实现EasyExcel导出excel

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。快速、简洁、解决大文件内存溢出的java处理Excel工具 快速&#xff1a;快速的读取excel中的数据。简洁&#xff1a;映射excel和实体类&#xff0c;让代码变的更加简…

(二十一)C++自制植物大战僵尸游戏僵尸游戏关卡结束数据处理

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs 文件位置 代码实现的文件在Class\Scenes\GameScene文件夹中,如下图所示。 GameEndLayer.h class GSGameEndLayer :public LayerColor { public:CREATE_FUNC(GSGameEndLayer);void successfullEntry();void brea…

我的博客系统自动化测试设计

我的博客系统测试设计 一、项目描述二、项目功能描述三、测试计划1、功能测试1.1 测试用例1.2 测试步骤 一、项目描述 1、采用前后端分离的来实现我的博客系统&#xff0c;使用MySQL 数据库存储用户和博客信息。   2、前端页面包含用户注册、登录、我的博客列表页、博客主页面…

Linux(文件系统和日志分析)

1.inode & block 1.1 inode的内容 stat 文件名&#xff1a; 查看文件的元信息 df -i&#xff1a;查看每个分区的inode数量 [rootlocalhost ~]# df -i 文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点 devtmpfs 478387 382 4…

03-JAVA设计模式-策略模式

策略模式 什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是行为设计模式之一&#xff0c;它使你能在运行时改变对象的行为。在策略模式中&#xff0c;一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中&#xff0c;…

C# winfrom 超详细UI创建过程 实现双色球选号器UI界面设计过程

一、 效果展示 1. 无点击效果展示&#xff1a;不选中——双色球为灰色&#xff0c;字体也为灰色 2.点击双色器效果展示&#xff1a;选中——双色球为红或者蓝&#xff0c;字体为白色 二、 使用控件标注说明 三、界面特点介绍 双色球代码控制生成---------由于红色33个球&…

Linux内核广泛采用的侵入式数据结构设计

Linux内核广泛采用的侵入式数据结构设计恐怕很难应用到一般程序开发中。基本上是个高维十字链表&#xff0c;一个节点(struct)可以同时位于多个hash/list/tree中。我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪…

【网络原理】IP协议的地址管理和路由选择

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 【网络…

Arthas:阿里出品,线上问题快速搞定!

前面我们通过JVM线程分析及内存分析来让大家从服务器资源异常情况下排查代码问题&#xff0c;类似这种的解决方式&#xff0c;更多的是在服务器资源占用已经异常显现&#xff0c;我们就可以按照这种方式去排查和解决。 但实际工作中&#xff0c;可能会出现&#xff1a;接口的TP…

什么是网络安全CTF?

什么是网络安全CTF? CTF 的意义&#xff1a; 如何入门 CTF&#xff1a; 推荐的在线 CTF 平台&#xff1a; 什么是网络安全CTF? CTF (Capture The Flag) 是一种网络安全竞赛&#xff0c;参赛者需要解决各种安全挑战&#xff0c;例如破解密码、利用漏洞、分析恶意软件等&am…

二极管钳位型光伏逆变并网建模simulink仿真

整理了二极管钳位型光伏逆变并网建模simulink仿真&#xff0c;效果明显&#xff0c;附赠仿真报告。适合小白 二极管钳位型光伏逆变并网是将光伏发电系统中的直流电能转换为交流电能&#xff0c;并与电网连接。在此仿真中使用最大功率点追踪&#xff08;MPPT&#xff09;技术&a…

【C语言】编译与链接

1.翻译环境与运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 1.翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令&#xff08;二进制指令&#xff09; 2.执行环境&#xff0c;它用于实际执行代码 2.翻译环境 那么翻译环境是怎么将源代码…