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

【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.kler.cn/a/442849.html

相关文章:

  • 【面试问题】JIT 是什么?和 JVM 什么关系?
  • IDEA下加载音频文件操作
  • Linux 查看文件末尾命令 tail 详细介绍
  • [LeetCode-Python版] 876. 链表的中间结点
  • 一键学懂BurpSuite(8)
  • 【Java入门指南 Day11:Lambda表达式与Stream API】
  • 8.2 分库分表简介
  • Java创建对象有几种方式?
  • 理解并使用 sysdig
  • ubuntu监测硬盘状态
  • 图像分割数据集石头rock分割数据集labelme格式2602张3类别
  • Leetcode 208实现Trie树前缀
  • iOS 核心动画
  • 【深入理解ApacheTomcat】
  • 数据结构和算法-06线段树-01
  • DOA估计算法——ESPRIT算法
  • mysql,创建数据库和用户授权核心语句
  • 使用 ts-node插件运行ts
  • C++的诗行:类与对象(中)
  • 关于IP代理API,我应该了解哪些功能特性?以及如何安全有效地使用它来隐藏我的网络位置?