引入
一、什么是Tomcat
Tomcat是一个开源的Java Web应用服务器,主要用于运行Java编写的网站和Web应用程序。实质上可以理解为是一个容器,一个用于承载项目的容器。
tomcat有什么作用,最基础来讲,当我们创建一个文件,当http访问时,该文件是无法访问的。
但我们把这些文件放入tomcat中,Tomcat可以接收和反馈外部的请求,并且也可以将用户的HTTP请求传递给容器做业务处理,最后将容器处理后的结果响应给外界。
二、通讯原理
如图,我举例了计算机内部操作系统和应用程序的通信、计算机之间的通信过程。程序之间通过socket进行通讯,计算机之间由网卡通过计算机网络进行通信。
其中
socket(套接字)是两个软件之间的通讯保证
Socket允许不同计算机或同一台计算机上的不同进程之间进行数据传输和交换。通过Socket,应用程序可以连接到其他计算机或网络设备,发送或接收数据,并可以监听或等待其他计算机或网络设备的请求。
网卡(网络接口卡)是计算机与网络相连的接口设备,它允许计算机通过网络与其他计算机或设备进行通信。
端口是计算机与外界通信交流的出口,用于区分不同的网络服务或应用程序。每个网络服务或应用程序都会占用一个或多个端口号,以便在网络上进行数据传输和通信。
- 端口号是一个16位的数字,范围从0到65535。
- 公认端口(0-1023):紧密绑定于一些服务,如HTTP(80端口)、FTP(21端口)等。
- 注册端口(1024-49151):松散地绑定于一些服务,可用于多种目的。
- 动态/私有端口(49152-65535):理论上不应为服务分配这些端口,但实际上常被用于动态分配。
当计算机通过网络发送数据时,数据会经过网卡的处理,并通过网卡上的端口发送到网络上。
接收数据时,网卡会监听网络上的数据包,并根据数据包中的目标端口号将数据传递给相应的网络服务或应用程序。
所以当我们在网络上进行通讯时采用“端口+信息”的方式
如下图,假设微信的端口为8989,QQ端口为1199。信息的传递形式通常如下:
用idea搭建一个简易的服务器和客户端
一、创建一个Java项目
最基础的就可以
二、SocketServer.java&SocketClient
创建Java文件:SocketServer.java
java">/*
* 服务器端 tomcat ——》接收信息
* */import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class SocketServer {public static void main(String[] args) throws IOException {run();}public static void run() throws IOException {ServerSocket serverSocket= new ServerSocket(4747);//端口的范围:0~65535while (true){//等待客户端连接Socket socket = serverSocket.accept();//阻塞监听:程序会在这里卡住。只有监听到客户端的信息后才会向下执行//输出客户端给我们发来的程序InputStream inputStream=socket.getInputStream();//打开输入流:接收输入的信息int count=0;while (count==0){count=inputStream.available();}byte[] bytes=new byte[count];//01010101010100001101010 用字节数组接收inputStream.read(bytes);String context=new String(bytes);System.out.println(context);}}
}
创建Java文件:SocketClient.java
java">import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;/*
*客户端——》发送信息
*
* */
public class SocketClient {public static void main(String[] args) throws IOException {Socket socket=new Socket("127.0.0.1",4747);OutputStream outputStream=socket.getOutputStream();PrintStream printStream=new PrintStream(outputStream);Scanner scanner=new Scanner(System.in);String context=scanner.nextLine();printStream.println(context);printStream.close();}
}
三、测试
测试一:
我们先让服务器跑起来,运行——SocketServer.java
服务器开始运行后,会在阻塞监听语句处卡住
然后我们运行客户端
在客户端输入传递信息
我们可以看到,该信息可以出现在服务器端
测试二:
现在我们进行网页测试,尝试通过网址输入端口,我们的服务器是否可以接收到请求。
在这里我们自设的端口号为4747
我们在网址栏发送GET请求
可以接收到