【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

能够接收到。

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


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音SEO短视频矩阵源码系统开发分享

在数字营销的前沿阵地&#xff0c;抖音短视频平台凭借其独特的魅力和庞大的用户基础&#xff0c;已成为社交媒体领域一股不可小觑的力量。随着平台影响力的持续扩大&#xff0c;如何有效提升视频内容的可见度与流量成为了内容创作者关注的焦点。在此背景下&#xff0c;一套专为…

使用 DeepSpeed 微调 OPT 基础语言模型

文章目录 OPT 基础语言模型Using OPT with DeepSpeedmain.py 解析1、导入库和模块2、解析命令行参数3、main 函数3.1 设备与分布式初始化3.2 模型与数据准备3.3 定义评估函数3.4 优化器与学习率调度器设置3.5 使用 deepspeed 进行模型等初始化3.6 训练循环3.7 模型保存 4、dsch…

window QT/C++ 与 lua交互(mingw + lua + LuaBridge + luasocket)

一、环境与准备工作 测试环境:win10 编译器:mingw QT版本:QT5.12.3 下载三种源码: LuaBridge源码:https://github.com/vinniefalco/LuaBridge LUA源码(本测试用的是5.3.5):https://www.lua.org/download.html luasocket源码:https://github.com/diegonehab/luasocket 目…

边缘智能创新应用大赛获奖作品系列三:边缘智能强力驱动,机器人天团花式整活赋能千行百业

边缘智能技术快速迭代&#xff0c;并与行业深度融合。它正重塑产业格局&#xff0c;催生新产品、新体验&#xff0c;带动终端需求增长。为促进边缘智能技术的进步与发展&#xff0c;拓展开发者的思路与能力&#xff0c;挖掘边缘智能应用的创新与潜能&#xff0c;高通技术公司联…

中后台管理信息系统:Axure12套高效原型设计框架模板全解析

中后台管理信息系统作为企业内部管理的核心支撑&#xff0c;其设计与实现对于提升企业的运营效率与决策能力具有至关重要的作用。为了满足多样化的中后台管理系统开发需求&#xff0c;一套全面、灵活的原型设计方案显得尤为重要。本文将深入探讨中后台管理信息系统通用原型方案…

云计算HCIP-OpenStack03

书接上回&#xff1a; 云计算HCIP-OpenStack02-CSDN博客 10.KeyStone keystone-Openstack&#xff0c;IAM服务&#xff08;统一身份认证&#xff09;-云服务 建议先去了解Hadoop&#xff08;大数据生态系统&#xff09;中的kerberos&#xff08;LDAPkerberos的鉴权机制&#xf…

el-table打印PDF预览,表头错位的解决方案

文章目录 背景与需求需求分析解决方案方案一&#xff1a;vue-print-nb插件安装引入使用 方案二安装使用 方案三 总结 背景与需求 本例以vue2项目为例&#xff0c;vue3与react等同理。 有个项目需要打印的功能&#xff0c;网页使用vue2写的&#xff0c;主体内容为表格el-table&a…

uniapp炫酷导航按钮及轮播指示器组件

一个拥有炫酷动效的导航按钮和指示器uniapp组件&#xff0c;帮你构建更炫酷的官网、宣传页、产品介绍等页面。 目前测试了vue2语法在h5和微信小程序的适配&#xff0c;其他平台理论上也能用。 下载及使用方法地址&#xff1a;iliya-desgin 展示&#xff1a; 目标页面出现在可视…

SAM大模型实践(一)

参考着segment-geospatial 项目主页的介绍&#xff0c;尝试复现一下Example-satallite的案例。 Satellite - segment-geospatialhttps://samgeo.gishub.org/examples/satellite/ 过程当中遇到了一些坑给大家做点分享&#xff0c;主要有几种情况&#xff0c;一个是torch…

如何为IntelliJ IDEA配置JVM参数

在使用IntelliJ IDEA进行Java开发时&#xff0c;合理配置JVM参数对于优化项目性能和资源管理至关重要。IntelliJ IDEA提供了两种方便的方式来设置JVM参数&#xff0c;以确保你的应用程序能够在最佳状态下运行。本文将详细介绍这两种方法&#xff1a;通过工具栏编辑配置和通过服…

解决电脑网速慢问题:硬件检查与软件设置指南

电脑网速慢是许多用户在使用过程中常见的问题&#xff0c;它不仅会降低工作效率&#xff0c;还可能影响娱乐体验。导致电脑网速慢的原因多种多样&#xff0c;包括硬件问题、软件设置和网络环境等。本文将从不同角度分析这些原因&#xff0c;并提供提高电脑网速的方法。 一、检查…

探索Starship:一款用Rust打造的高性能终端

在终端的世界里&#xff0c;效率和美观往往并行不悖。今天&#xff0c;我们要介绍的是一款名为Starship的终端工具&#xff0c;它以其轻量级、高颜值和强大的自定义功能&#xff0c;赢得了众多开发者的青睐。 安装 任选一种方式进行安装 Windows &#x1fa9f; # scoop scoo…

快速启动Go-Admin(Gin + Vue3 + Element UI)脚手架管理系统

Go-Admin 是一个基于 Gin Vue Element UI & Arco Design & Ant Design 的前后端分离权限管理系统脚手架。它包含了多租户支持、基础用户管理功能、JWT 鉴权、代码生成器、RBAC 资源控制、表单构建、定时任务等功能。该项目的主要编程语言是 Go 和 JavaScript。 ps&a…

SEC_ASA 第二天作业

拓扑 按照拓扑图配置 NTP&#xff0c;Server端为 Outside路由器&#xff0c;Client端为 ASA&#xff0c;两个设备的 NTP传输使用MD5做校验。&#xff08;安全 V4 LAB考点&#xff09; 提示&#xff1a;Outside路由器作为 Server端要配置好正确的时间和时区&#xff0c;ASA防…

《深入探究:C++ 在多方面对 C 语言实现的优化》

目录 一、C 在 C 上进行的优化二、C 关键字&#xff08;C 98&#xff09;三、C 的输入输出1. cin 和 cout 的使用2. cin、cout 和 scanf()、printf() 的区别 三、命名空间1. 命名空间的使用2. 嵌套命名空间3. 在多个头文件中使用相同的命名空间 四、函数缺省值1. 缺省值的使用2…

vue3修改elementui-plus的默认样式的几种方法

#创作灵感 今天写vue的前端项目&#xff0c;因为需要去修改elementui-plus中drawer的默认样式&#xff0c;所以刚好将修改步骤记录下来。 一共提供了三种方法&#xff0c;但亲测第二种最好用。 使用第二种是可以无视自己的代码中是否定义了该盒子&#xff0c;因为有时候盒子的…

Fiddler简单使用

Fiddler使用方法 1.作用 接口测试&#xff0c;发送自定义请求&#xff0c;模拟小型的接口测试定位前后端bug&#xff0c;抓取协议包&#xff0c;前后端联调构建模拟测试场景&#xff0c;数据篡改&#xff0c;重定向弱网测试&#xff0c;模拟限速操作&#xff0c;弱网&#xf…

如何通过递延型指标预测项目的长期成果?

递延型指标&#xff08;Deferred Metrics&#xff09;是指那些并不立即反映或直接影响当前操作、决策或行为的指标&#xff0c;而是随着时间的推移&#xff0c;才逐渐显现出影响效果的指标。这类指标通常会在一段时间后反映出来&#xff0c;或者需要一定的周期才能展现其成果或…

SpringCloud微服务实战系列:01让SpringCloud项目在你机器上运行起来

目录 项目选型 项目安装-本地运行起来 软件安装&#xff1a; 项目启动&#xff1a; 总结&答疑 项目选型 软件开发&#xff0c;基本上都不会从0开始&#xff0c;一般都是在其他项目或者组件的基础上进行整合优化迭代&#xff0c;站在巨人肩膀上才能看得更远&#xff0c…

分布式全文检索引擎ElasticSearch-数据的写入存储底层原理

一、数据写入的核心流程 当向 ES 索引写入数据时&#xff0c;整体流程如下&#xff1a; 1、客户端发送写入请求 客户端向 ES 集群的任意节点&#xff08;称为协调节点&#xff0c;Coordinating Node&#xff09;发送一个写入请求&#xff0c;比如 index&#xff08;插入或更…