当前位置: 首页 > news >正文

【Tomcat】第一站:理解tomcat与Socket

目录

1. Tomcat

1.1 Tomcat帮助启动http服务器。

1.2 tomcat理解:

2. 计算机网络最基本的流程

 2.1 信息是怎么来的?

2.2 端口是干什么的?

3. 简单的Socket案例

服务端

客户端

启动:

3.2 在Tomcat发送信息,看能不能接收到


1. Tomcat

大公司的MVC框架都是自己设计搭建的。

Tomcat---本身只是一个web容器,这个容器能够承载项目


1.1 Tomcat帮助启动http服务器

        解释:xxxDemo  自己写好的项目,外部是无法通过http访问到这个写好的项目的,那么我们把它放进tomcat中,然后启用http,外部就能够访问了。

        http是网络访问形式,


1.2 tomcat理解:

比如,

        我们写一个a.html,在网页上打开显示访问方式:

    我们想要http访问,可以:

        把它放进tomcat中。

我们直接打开tomcat

所有的项目都在 tomcat 下的webapps目录下。

        我们在 tomcat 的 webapps 下直接新建一个文件夹(其实就是新建一个项目),起名叫 'myweb' ,  把我们写的 a.html文件放进这个文件夹中,启动tomcat。

        .bat文件是Windows的启动。

启动之后再访问a.html,此时的访问是http的访问形式。

总结

        tomcat:是服务器---->能让其中配置的项目接受http请求。


2. 计算机网络最基本的流程

1> 操作系统做网络的问答。

2> 应用程序在操作系统之上。

3> 应用程序通过Socket与操作系统通讯。

4> 操作系统之下是物理硬件--网卡

网卡通过导线相连(即网线),两个网卡通过大型的计算机网络相连。

        网卡就是 接收 和 发送 0101这样信号的。

这就是计算机网络最基本的流程。

总结

        Socket就是两个软件之间的通讯保证。 

 2.1 信息是怎么来的?

        Tomcat本身就是一个应用软件,如果我们现在去掉操作系统。

        如果一个信息发送过来,肯定是先打到网卡,然后通过Socket,最后把 当前信息 给到 应用程序Tomcat中。

2.2 端口是干什么的?

        网卡上设置有端口。

网卡:什么样的信息都可以发送到网卡。

        操作系统之上运行有各种各样的软件(WX,QQ,Tomcat...),那么,怎么把当前信息准确地发到对应的软件?

                        :通过端口。 

比如

        与微信上的女朋友说:I love you.

        与QQ上的女朋友说“今晚一起吃饭。”

   如何发送到对应的软件?

        要想被识别,信息必须带上端口号,才能对应上。


3. 简单的Socket案例

         打开IDEA,新建项目,选择java项目,SDK默认即可,其余都不选,下一步取个名字 ’javaDemo‘。

过程:

         首先,新建一个客户端,起名’SocketClient‘

客户端是发送信息的。可以理解为浏览器。 

        再新建一个类,’SocketServer‘

服务器端,类比于tomcat,接收信息。

服务端

服务端

        写个run()方法

1.创建Socket:

        监听4747端口(我们所能监听的端口,0--65535因为端口只有这些

public  static void run() throws IOException {ServerSocket serverSocket=new ServerSocket(4747);//端口的范围:0--65535}

2. 写一个循环等待客户的连接

while(true){}

        while(true)本身是一个死循环,为了不让程序卡死,我们调用一个 serverSocket.accept() 方法,阻塞监听:只有监听到客户端的信息后才会向下执行

Socket socket = serverSocket.accept();//阻塞监听,只有监听到客户端的信息后才会向下执行

3.下一步输出客户端给我们发来的程序。

        socket.getInputStream() 打开当前的输入流,接收输入的信息。

InputStream inputStream = socket.getInputStream();//打开输入流:接收输入的信息

        输入的字节流信息按字节流读取:read()阻塞

从Socket上读取对端发过来的数据一般有两种方法:


1)按照字节流读取

BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
int r = -1;
List<Byte> l = new LinkedList<Byte>();while ((r = in.read()) != -1) {l.add(Byte.valueOf((byte) r));}


2)按照字符流读取

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String s;while ((s = in.readLine()) != null) {System.out.println("Reveived: " + s);}


        这两个方法 read()readLine() 都会读取对端发送过来的数据,如果无数据可读,就会阻塞直到有数据可读。或者到达流的末尾,这个时候分别返回-1和null。
这个特性使得编程非常方便也很高效。

        信息量是多少,输入流就是0101这样的数据,最后把0101数据转换成String类型的字符串数据。

int count=0;
while(count==0){count= inputStream.available();
}
byte[] bytes=new byte[count];//010101001
inputStream.read(bytes);
String context=new String(bytes);
System.out.println(context);

客户端

1. 创建Socket

Socket socket=new Socket("127.0.0.1",4747);

          本地端口号是'127.0.0.1', 向 4747 端口号传信息。

2. 打开输出流,建立Socket连接

        getOutputStream方法得到的是一个输出流,客户端的Socket对象上的getOutputStream方法得到的输出流其实就是发送给服务器端的数据。

OutputStream outputStream = socket.getOutputStream();

3. 打印输出流

PrintStream printStream=new PrintStream(outputStream);
System.out.println("hello");

若想输入自己想要的东西

Scanner scanner=new Scanner(System.in);
String context = scanner.nextLine();
printStream.println(context);

4. 关闭输出流

        close()方法用于关闭基础输出流。


启动:

        先启动服务器端,让他处于随时的监听状态。

        再启动客户端。


3.2 在Tomcat发送信息,看能不能接收到

        首先,运行服务器。

Tomcat:

4747端口发送aaaaaa.ssss

能够接收到。

        就是说,当前服务端能直接接收浏览器传输的信息的。


相关文章:

【Tomcat】第一站:理解tomcat与Socket

目录 1. Tomcat 1.1 Tomcat帮助启动http服务器。 1.2 tomcat理解&#xff1a; 2. 计算机网络最基本的流程 2.1 信息是怎么来的&#xff1f; 2.2 端口是干什么的&#xff1f; 3. 简单的Socket案例 服务端 客户端 启动&#xff1a; 3.2 在Tomcat发送信息&#xff0c;看…...

TQ15EG开发板教程:使用SSH登录petalinux

本例程在上一章“创建运行petalinux2019.1”基础上进行&#xff0c;本例程将实现使用SSH登录petalinux。 将上一章生成的BOOT.BIN与imag.ub文件放入到SD卡中启动。给开发板插入电源与串口&#xff0c;注意串口插入后会识别出两个串口号&#xff0c;都需要打开&#xff0c;查看串…...

Java从入门到工作4 - MySQL

一&#xff1a;检测数据库网络 telnet 127.0.0.1 3306 注意ip和端口后之间是空格&#xff0c;不需要引号 二&#xff1a;SQL语法 1、创建结果集 SELECT 电视机 AS typeUNION SELECT 电冰箱UNION SELECT 洗衣机UNION SELECT 空调UNION SELECT 电脑UNION SELECT 热水器UNION…...

OpenShift 4 - 多云管理(2) - 配置多集群观察功能

《OpenShift / RHEL / DevSecOps 汇总目录》 本文在 OpenShift 4.17 RHACM 2.12 环境中进行验证。 文章目录 多集群观察技术架构安装多集群观察功能监控多集群的运行状态监控多集群的应用运行在被管集群监控应用运行在管理集群监控被管集群的应用运行 参考 多集群观察技术架构…...

【鸿睿创智开发板试用】RK3568 NPU的人工智能推理测试

目录 引言 驱动移植 例程编译 修改build.sh 执行编译 运行测试 部署libc的库文件 执行测试程序 结语 引言 鸿睿创智的H01开发板是基于RK3568芯片的&#xff0c;瑞芯微芯片的一大特色就是提供了NPU推理的支持。本文将对其NPU推理进行测试。 驱动移植 H01的开发板已经…...

iOS swift开发系列 -- tabbar问题总结

1.单视图如何改为tabbar&#xff0c;以便显示2个标签页 右上角➕&#xff0c;输入tabbar 找到控件&#xff0c;然后选中&#xff0c;把entrypoint移动到tabbar控件 2.改成tabbar&#xff0c;生成两个item&#xff0c;配置各自视图后&#xff0c;启动发现报错 Thread 1: “-[p…...

四、CSS3

一、CSS3简介 1、CSS3概述 CSS3 是 CSS2 的升级版本&#xff0c;他在CSS2的基础上&#xff0c;新增了很多强大的新功能&#xff0c;从而解决一些实际面临的问题。 CSS在未来会按照模块化的方式去发展&#xff1a;https://www.w3.org/Style/CSS/current-work.html …...

Three使用WebGPU的关键TSL

Three.js 使用 WebGPU 的关键 TSL TSL: three.js shader language 介绍 three.js 材质转为webgpu的关键流程, 从而引出 TSL. 1、关键类关系 WebGPURenderer|-- library: StandardNodeLibrary|-- _nodes: Nodes|-- _objects: RenderObjects|-- createRenderObject()StandardN…...

ESP32-S3模组上跑通ES8388(30)

接前一篇文章:ESP32-S3模组上跑通ES8388(29) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回终于解析完了es8388_init函数的所有代码。本回回到调用它的地方,继续往下讲解。 我们是从ESP32-S3模组上跑通ES8388(7)-CSDN博客开始进入es8388_init函数,展开对于它的解析的…...

概率论得学习和整理24:EXCEL的各种图形,统计图形

目录 0 EXCEL的各种图形&#xff0c;统计图形 1 统计图形 / 直方图 / 其实叫 频度图 hist最合适(用原始数据直接作图) 1.1 什么是频度图 1.2 如何创建频度图&#xff0c;一般是只选中1列数据&#xff08;1个数组&#xff09; 1.3 如何修改频度图的宽度 1.4 hist图的一个特…...

WPF中依赖属性的底层和普通属性的底层有什么不一样

WPF中依赖属性的底层 在 WPF 中&#xff0c;依赖属性&#xff08;Dependency Property&#xff09;是 WPF 属性系统的核心&#xff0c;它支持功能强大的特性&#xff08;如数据绑定、动画、样式等&#xff09;。其底层实现是围绕 DependencyObject 类展开的。以下是 WPF 中依赖…...

【Qt】drawText字体大小问题探究

背景 软件的一个功能是&#xff1a; 打开图片在图片上绘制序号&#xff0c;序号的样式是圆圈内包含数字将带有序号的图片打印出来 实现思路也很简单&#xff0c;在屏幕上显示时重写paintEvent函数&#xff0c;利用QPainter完成图片和序号的绘制。打印时只需要将QPainter对应…...

Mapbox-GL 的源码解读的一般步骤

Mapbox-GL 是一个非常优秀的二三维地理引擎&#xff0c;随着智能驾驶时代的到来&#xff0c;应用也会越来越广泛&#xff0c;关于mapbox-gl和其他地理引擎的详细对比&#xff08;比如CesiumJS&#xff09;&#xff0c;后续有时间会加更。地理首先理解 Mapbox-GL 的源码是一项复…...

【C++】高级分析 switch 语句的应用

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;switch 语句的基本用法语法结构核心要点实例演示正确实现 期望输出错误实现错误输出 &#x1f4af;if 与 switch 语句的实现比较使用 if 语句使用 switch 语句比较分析 &am…...

活动预告 | Surface 来了#11:Windows 11 AI+ PC,释放 AI 办公设备的无限潜能

课程介绍 欢迎来到 Surface 来了第 11 期节目。 今年 5 月底&#xff0c;微软推出了专为 AI 体验而设计的全新 Windows PC 品类&#xff1a;Windows 11 AI PC。 微软通过 Windows 11 AI PC&#xff0c;进一步强调了 NPU 在运行设备端 AI 功能的重要性。并要求符合这一品类的…...

php基础:正则表达式

1.正则表达式 正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。到目前为止&#xff0c;我们前面所用过的精确&#xff08;文本&#xff09;匹配也是一种正则表达式。 在PHP中&#xff0c;正则表达式一般是由正规字…...

go语言压缩[]byte数据为zlib格式的时候,耗时较多,应该怎么修改?

在Go语言中使用compress/flate包来实现Zlib格式的压缩时&#xff0c;如果发现压缩耗时较多&#xff0c;可以考虑以下几个优化方向&#xff1a; ### 1. 压缩级别 默认情况下&#xff0c;compress/flate包中的NewWriter函数使用的是默认压缩级别&#xff08;BestSpeed和BestComp…...

[机器学习]AdaBoost(数学原理 + 例子解释 + 代码实战)

AdaBoost AdaBoost&#xff08;Adaptive Boosting&#xff09;是一种Boosting算法&#xff0c;它通过迭代地训练弱分类器并将它们组合成一个强分类器来提高分类性能。 AdaBoost算法的特点是它能够自适应地调整样本的权重&#xff0c;使那些被错误分类的样本在后续的训练中得到…...

深入了解Spring

目录 Spring基础 什么是Spring框架&#xff1f; Spring 包含的模块有哪些&#xff1f; Core Container AOP Data Access/Integration Spring Web Messaging Spring Test Spring,Spring MVC,Spring Boot 之间什么关系? Spring基础 什么是Spring框架&#xff1f; Sp…...

jar 包如何下载

maven官网&#xff1a;https://mvnrepository.com/ 点击搜索&#xff0c;找对应搜索结果点击...

基于GTE文本向量的智能应用开发:快速构建文本分析服务

基于GTE文本向量的智能应用开发&#xff1a;快速构建文本分析服务 1. GTE文本向量技术概览 GTE&#xff08;General Text Embedding&#xff09;文本向量模型是当前中文自然语言处理领域的重要技术突破。这个基于ModelScope的预训练模型能够将文本转换为高维向量表示&#xf…...

数字记忆争夺战:WechatDecrypt本地解密技术实现与场景化应用指南

数字记忆争夺战&#xff1a;WechatDecrypt本地解密技术实现与场景化应用指南 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 问题溯源&#xff1a;当数字记忆遭遇加密牢笼 从一则数据丢失案例说起 张先…...

避坑指南:OpenClaw安装Qwen3-4B镜像的5大常见错误

避坑指南&#xff1a;OpenClaw安装Qwen3-4B镜像的5大常见错误 1. 为什么需要这份避坑指南 上周我在本地部署OpenClaw对接Qwen3-4B镜像时&#xff0c;连续踩了三个坑&#xff1a;先是npm版本冲突导致安装失败&#xff0c;接着模型地址格式写错导致连接超时&#xff0c;最后又遇…...

快速体验Seed-Coder-8B-Base:通过简单API调用实现代码自动生成

快速体验Seed-Coder-8B-Base&#xff1a;通过简单API调用实现代码自动生成 1. 为什么选择Seed-Coder-8B-Base 在当今快节奏的开发环境中&#xff0c;代码自动生成工具已经成为提升效率的必备利器。Seed-Coder-8B-Base作为一款专为代码生成优化的开源模型&#xff0c;具有以下…...

电-热-气综合能源系统协同优化Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f447; 关注我领取海量matlab电子书和数学建模资料&#x1f34a;个人信条&#xff1a;格物致知,完整Matl…...

网盘下载速度太慢?8大平台直链解析工具让你告别限速烦恼

网盘下载速度太慢&#xff1f;8大平台直链解析工具让你告别限速烦恼 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

别再死记硬背了!用‘四体交叉’和‘双端口RAM’的实战题目,彻底搞懂计算机组成原理的存储器提速

从四体交叉到双端口RAM&#xff1a;用实战思维破解存储器提速难题 计算机组成原理中那些晦涩的存储器提速概念&#xff0c;是否总让你在题海中迷失方向&#xff1f;当"单体多字"、"多体并行"、"四体交叉"这些术语在教材里冰冷排列时&#xff0c;…...

C++ STL 容器选型实战:vector/list/map/unordered_map 性能对比与选型指南

一、前言&#xff1a;为什么容器选型是 C 工程的核心&#xff1f;在 C 后端开发、Qt 桌面应用、高性能服务器、嵌入式系统、游戏引擎、实时仿真、数据分析等几乎所有工业级项目中&#xff0c;STL 容器的选型直接决定程序性能、内存占用、可维护性与稳定性。很多开发者习惯随手写…...

OpenClaw自动化测试:Qwen3.5-9B-AWQ-4bit验证UI截图一致性

OpenClaw自动化测试&#xff1a;Qwen3.5-9B-AWQ-4bit验证UI截图一致性 1. 为什么需要自动化UI测试 在个人项目迭代过程中&#xff0c;我发现每次功能更新后手动检查UI一致性非常耗时。上周修改了一个按钮样式后&#xff0c;意外导致移动端布局错位&#xff0c;直到用户反馈才…...

弦音墨影在影视鉴赏中的创新应用:自然语言解析千里江山图式影像

弦音墨影在影视鉴赏中的创新应用&#xff1a;自然语言解析千里江山图式影像 1. 系统概述与核心价值 「弦音墨影」是一款将尖端人工智能技术与东方美学深度融合的视频理解系统。它基于Qwen2.5-VL多模态大模型&#xff0c;为用户提供了一种全新的视频内容交互体验——通过自然语…...