手写简易的web服务器(理解BS架构和CS架构)

java 复制代码
package com.csdn.http;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class WebServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8899);

        while (true) {
            Socket clientSocket = serverSocket.accept();

            //接收客户端发送过来的数据
            InputStream inputStream = clientSocket.getInputStream();
            byte[] bytes = new byte[1024];

            int length = inputStream.read(bytes);
            System.out.println(new String(bytes, 0, length));
            clientSocket.shutdownInput();

            //给客户端返回数据
            OutputStream outputStream = clientSocket.getOutputStream();

            //服务器在返回内容之前,要先返回响应头
            outputStream.write("HTTP/1.1 200 OK\r\n".getBytes());//每个响应头后面都要有一个换行
            outputStream.write("Date: Fri, 20 Oct 2023 12:54:09 GMT\r\n".getBytes());
            outputStream.write("Content-type:text/html;charset=utf-8\r\n".getBytes());

            //所以的响应头全部写完以后,再写一个换行
            outputStream.write("\r\n".getBytes());

            //服务器返回的内容
            outputStream.write("<h1 style='color:red'>我是服务器返回的内容</h1>".getBytes());

//            clientSocket.shutdownInput();

            clientSocket.close();
        }

    }
}
D:\Java\jdk-17\bin\java.exe
GET / HTTP/1.1
Host: 192.168.14.55:8899
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9


GET /favicon.ico HTTP/1.1
Host: 192.168.14.55:8899
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46
Accept: image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Referer: http://192.168.14.55:8899/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

1、BS架构

  • 下面我以 Microsoft Edge 为例,访问我们的服务器
  • 用浏览器访问 web 服务器,服务器控制台打印的内容是 浏览器 响应 的内容

2、CS架构

  • 我会用一个小工具代表我们的 客户端 ,这个小工具是 NetAssist V4.3.13 版本的网络调试助手
  • 由于 IDEA 软件用的是 UTF-8 编码 所以 我们把 网络调试助手 软件 改为 接收编码为 UTF-8 ,防止我们接收服务器发过来的内容乱码
相关推荐
玖玥拾1 小时前
Unity 3D 笔记(十四)Unity/C# Socket 网络笔记3
服务器·网络·unity·c#
三8442 小时前
使用Samba/NFS实现文件共享/自动挂载共享目录/autofs自动挂载服务
linux·服务器·网络
高铭杰3 小时前
万物皆可KV(2)SurrealDB 存储布局分析
linux·服务器
万事可爱^3 小时前
Claude 新发布的 Opus 5,系统提示语删了 80%,半价还能逼近 Fable 5
android·服务器·数据库·人工智能·claude
玖玥拾3 小时前
Unity 3D 笔记(十七)Unity/C# Socket 网络笔记6
服务器·网络·unity·c#
其实防守也摸鱼4 小时前
GitHub开源项目破圈方法论:从技术自嗨到生态共赢
服务器·数据库·学习·开源·github·命令行·linux系统
爱写代码的森5 小时前
鸿蒙三方库 | harmony-utils之PasteboardUtil剪贴板数据读写详解
服务器·华为·harmonyos·鸿蒙·huawei
xlq223226 小时前
高并发服务器day5
java·服务器·数据库
明日清晨6 小时前
printf(“%p\n“,&((struct A *)NULL)->m_float)的原理
linux·服务器·前端
William_cl6 小时前
WinForms EF Core 上下文频繁释放引发的异常排查与规范方案(MES 项目实录)
服务器·数据库·oracle