【Tomcat】理解tomcat与Socket

目录

[1. Tomcat](#1. Tomcat)

[1.1 Tomcat帮助启动http服务器。](#1.1 Tomcat帮助启动http服务器。)

[1.2 tomcat理解:](#1.2 tomcat理解:)

[2. 计算机网络最基本的流程](#2. 计算机网络最基本的流程)

[2.1 信息是怎么来的?](#2.1 信息是怎么来的?)

[2.2 端口是干什么的?](#2.2 端口是干什么的?)

[3. 简单的Socket案例](#3. 简单的Socket案例)

服务端

客户端

启动:

[3.2 在Tomcat发送信息,看能不能接收到](#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,因为端口只有这些)

java 复制代码
public  static void run() throws IOException {
    ServerSocket serverSocket=new ServerSocket(4747);//端口的范围:0--65535
    }
  1. 写一个循环等待客户的连接
java 复制代码
while(true){
    
}

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

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

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

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

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

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

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

1)按照字节流读取

java 复制代码
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)按照字符流读取

java 复制代码
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类型的字符串数据。

java 复制代码
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
java 复制代码
Socket socket=new Socket("127.0.0.1",4747);

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

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

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

java 复制代码
OutputStream outputStream = socket.getOutputStream();
  1. 打印输出流
java 复制代码
PrintStream printStream=new PrintStream(outputStream);
java 复制代码
System.out.println("hello");

若想输入自己想要的东西

java 复制代码
Scanner scanner=new Scanner(System.in);
String context = scanner.nextLine();
printStream.println(context);
  1. 关闭输出流

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


启动:

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

再启动客户端。


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

首先,运行服务器。

Tomcat:

4747端口发送aaaaaa.ssss

能够接收到。

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


相关推荐
知兀1 分钟前
Maven
java·笔记·maven·javaweb·黑马程序员
开发者联盟league1 分钟前
eclipse rcp-创建rcp-创建target
java·ide·eclipse
V+zmm101344 分钟前
展柜设计公司平面布置小程序的分析与设计springboot+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
Nijika...10 分钟前
RabbitMQ 基本使用方法详解
java·后端·spring·rabbitmq
合方圆~小文13 分钟前
工业现场的视频图像采集设备
java·c语言·人工智能·数码相机·物联网·信号处理
江梦寻32 分钟前
区块链赋能数字藏品设计提案
java·数据库·sql·mysql·区块链·数据库架构
m0_7482550243 分钟前
FlutterWeb启动耗时优化
java
NorthCastle1 小时前
设计模式-创建型模式-单例模式详解
java·单例模式·设计模式
听风吟丶1 小时前
《深入理解 Java 中的单例模式(Singleton)》
java·单例模式