文章目录
一、WEB服务器
服务器概述
- 指的也是计算机,只不过服务器要比我们日常使用的计算机大很多。
服务器,也称伺服器。是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。
服务器的构成包括处理器、硬盘、内存、系统总线等,和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
在网络环境下,根据服务器提供的服务类型不同,可分为:文件服务器,数据库服务器,应用程序服务器,WEB服务器等。
服务器只是一台设备,必须安装服务器软件才能提供相应的服务。
使用Java代码手写web服务器
主要使用到的是ServerSocket
和Socket
ServerSocket
和Socket
是Java网络编程中的两个核心类,它们位于java.net
包中,用于实现基于TCP协议的客户端-服务器通信模型。
- ServerSocket:
ServerSocket
类在Java中代表服务器端的套接字,它主要用于监听指定端口上的客户端连接请求。- 服务器程序通过实例化一个
ServerSocket
对象,并绑定到特定的端口号上,开始等待客户端的连接。- 当调用
ServerSocket.accept()
方法时,服务器会阻塞并等待客户端的连接。一旦有新的客户端连接请求到达,该方法会返回一个新的Socket
对象,表示与该客户端建立了一个新的通信通道。- Socket:
socket
又称套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求。Socket
类则代表客户端或服务端的一个连接端点,即一个已建立连接的套接字。Socket
允许程序员将网络连接看作是另外一个可以读写字节的流(既然是流,就肯定有两端)。Socket
是建立网络连接时使用的,在连接成功时,应用程序两端都会产生一个socket实例。操作这个实例,完成所需的会话。- 在客户端,应用程序创建一个
Socket
对象,通常需要指定服务器的IP地址和端口号,然后通过调用Socket
构造函数来发起对服务器的连接请求。- 建立连接后,客户端和服务端都可以通过各自对应的
Socket
对象进行读写操作,进行双向的数据传输。总结来说,
ServerSocket
用于在服务器端创建并监听连接,而Socket
则是在客户端和服务端之间实际数据交换的载体。通过这两种对象的协同工作,实现了Java网络编程中的可靠、面向连接的通信机制。
说明:以下代码大家不需要自己写,我们主要是通过代码,让大家了解到服务器针对HTTP协议的解析机制
/*
* 自定义web服务器
*/
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(8080); // 监听指定端口
System.out.println("server is running...");
while (true){
Socket sock = ss.accept();
System.out.println("connected from " + sock.getRemoteSocketAddress());
Thread t = new Handler(sock);
t.start();
}
}
}
class Handler extends Thread {
Socket sock;
public Handler(Socket sock) {
this.sock = sock;
}
public void run() {
try (InputStream input = this.sock.getInputStream();
OutputStream output = this.sock.getOutputStream()) {
</