【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

能够接收到。

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


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux / Windows | ping IP + Port 测试

注&#xff1a;本文为 “Linux / Windows | ping IP Port 测试端口通畅” 相关文章合辑。 未整理去重。 windows 如何确认服务器上程序端口是否正常&#xff08;ping、tcping&#xff09; 三希已于 2023-05-22 18:08:06 修改 方式 1&#xff1a;ping 命令 ping 命令说明 p…

计算机网络之网络层超详细讲解

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络之网络层超详细讲解 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; …

LLMC:大语言模型压缩工具的开发实践

关注&#xff1a;青稞AI&#xff0c;学习最新AI技术 青稞Talk主页&#xff1a;qingkelab.github.io/talks 大模型的进步&#xff0c;正推动我们向通用人工智能迈进&#xff0c;然而庞大的计算和显存需求限制了其广泛应用。模型量化作为一种压缩技术&#xff0c;虽然可以用来加速…

jvm内存优化方式

1. JVM&#xff08;Java Virtual Machine&#xff09;&#xff1a; • 定义&#xff1a;Java虚拟机&#xff0c;是运行Java字节码的抽象计算机。 • 内存管理&#xff1a;负责内存的分配和回收&#xff0c;是JVM内存优化的核心。 2. 堆&#xff08;Heap&#xff09;&#xff1a…

360智脑张向征:共建可信可控AI生态 应对大模型安全挑战

发布 | 大力财经 人工智能的加速发展&#xff0c;有力推动了社会的数智化转型&#xff1b;与此同时&#xff0c;带来的相关安全风险也日益凸显。近日&#xff0c;在北京市举办的通明湖人工智能开发与应用大会上&#xff0c;360智脑总裁张向征以“大模型安全研究与实践”为主题&…

CNCF云原生生态版图-分类指南(三)- 运行时

CNCF云原生生态版图-分类指南&#xff08;三&#xff09;- 运行时 CNCF云原生生态版图-分类指南三、运行时&#xff08;Runtime&#xff09;&#xff08;一&#xff09;云原生存储&#xff08;Cloud Native Storage&#xff09;1. 是什么&#xff1f;2. 解决什么问题&#xff1…

【实验】基于双向LSTM和注意力机制的文本分类

目录 1 数据 2 模型构建 2.1 注意力打分函数 2.1.1 加性模型 2.1.2 点积模型 2.2 注意力分布计算 2.3 加权平均 2.4 完整注意力机制的实现 2.4 模型汇总 3 模型训练 3.1 使用加性注意力模型 3.2 使用点积注意力模型 4 模型评价 4.1 使用加性注意力模型 4.2 使用点…

Tongweb7049M4有关SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱的处理方案(by lqw)

前提条件&#xff1a;Tongweb7049M4已在http通道里配置了https&#xff08;如何配置https可以参考这个帖子&#xff1a;东方通TongWEB添加Https证书&#xff0c;开启SSL&#xff09; 遇到客户在配置了https后&#xff0c;扫描漏洞提示&#xff1a; 有关SSL/TLS 服务器瞬时 Dif…

浩辰CAD教程004:柱梁板

文章目录 柱梁板标准柱角柱构造柱柱齐墙边绘制梁绘制楼板 柱梁板 标准柱 绘制标准柱&#xff1a; ①&#xff1a;点选插入柱子②&#xff1a;沿着一根轴线布置柱子③&#xff1a;指定的矩形区域内的轴线交点插入柱子 替换现有柱子&#xff1a;选择替换之后的柱子形状&#x…

VScode 配置 debug环境

首先请阅读官方文档 Debug python 在vscode 中安装好对应的python 插件 运行程序不存在输入参数的时候 当运行python脚本不存在输入参数的时候&#xff0c;可以使用右上角的直接开始debug 然后开始调试即可。 当需要配置输入参数的时候 在当前项目下 .vscode目录 中 添加…

【时时三省】(C语言基础)结构体传参

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 结构体传参 struct S有一个int data 它有一千个元素 然后struct S 创建了一个s给它初始化了 如果想把s的赋值打印 可以把s直接传给Printf 1 是传结构体的方式 也可以穿s的地址给print 2 …

PCL点云库入门——PCL库可视化之CloudViewer类简单点云信息显示

1、前言 可视化&#xff08;visualization&#xff09;涉及运用计算机图形学和图像处理技术&#xff0c;将数据转换成图像并在屏幕上展示&#xff0c;同时支持交互式处理。在PCL库中&#xff0c;一系列强大的可视化工具可供使用&#xff0c;其中较为流行的包括CloudViewer和PCL…

人工智能技术的深度解析与推广【人工智能的应用场景】

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…

Source Insight的使用经验汇总

01-Add All"和“Add Tree”有何区别&#xff1f; 在 Source Insight 中&#xff0c;“Add All”和“Add Tree”是两种向项目&#xff08;Project&#xff09;中添加文件的操作选项&#xff0c;它们的区别在于处理文件和目录的方式不同&#xff1a; 1. Add All 范围&am…

检查读取数据寄存器输出的多扇出

为使第二寄存器被 RAM 原语吸收&#xff0c;来自存储器阵列的数据输出位的扇出必须为 1 。这在下图中进行了说明。 检查地址 / 读取数据寄存器上的复位信号 不应复位存储器阵列。只有 RAM 的输出可以容许复位。复位必须是同步的&#xff0c;以便将输出寄存器推断到 RAM 基元…

信创改造-Spring Boot 项目部署至 TongWeb

打 war 包参考&#xff1a;https://blog.csdn.net/z1353095373/article/details/144330999

趣味编程:猜拳小游戏

1.简介 这个系列的第一篇以猜拳小游戏开始&#xff0c;这是源于我们生活的灵感&#xff0c;在忙碌的时代中&#xff0c;我们每个人都在为自己的生活各自忙碌着&#xff0c;奔赴着自己所走向的那条路上&#xff0c;即使遍体鳞伤。 但是&#xff0c;生活虽然很苦&#xff0c;也不…

微服务-01

1.认识微服务 1.1 单体架构 单体架构&#xff08;monolithic structure&#xff09;&#xff1a;顾名思义&#xff0c;整个项目中所有功能模块都在一个工程中开发&#xff1b;项目部署时需要对所有模块一起编译、打包&#xff1b;项目的架构设计、开发模式都非常简单。 当项目…

【Linux———基础IO】

每一滴眼泪&#xff0c;每一次心碎&#xff0c;什么爱能无疚无悔.......................................................................... 文章目录 前言 一、【认识文件I/O】 1.1、【回顾C语言文件I/O】 1.2、【操作系统文件I/O】 1.2.1、【open函数】 1、【open函数的三…

机器视觉LED面光源 成像效果显著

在机器视觉系统中&#xff0c;光源作为不可或缺的一部分&#xff0c;合适的光源能够提高检测物成像效果&#xff0c;增强检测效果。因此光源的选择至关重要&#xff0c;针对不同的检测对象,不同形状的光源应运而生。每种光源都有其适用的场景应用&#xff0c;选对光源&#xff…