网络编程中服务器端与浏览器的交互的问题

简介: 网络编程中服务器端与浏览器的交互的问题

服务端代码:

//服务器端
public class Server {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务器启动==========");

        while(!serverSocket.isClosed()){
            Socket socket = serverSocket.accept();  //阻塞,等待连接

            System.out.println("与 " + socket.toString() + "连接成功");
            try{
                // I/O
                InputStream inputStream = socket.getInputStream();      //接收数据流
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));

                String message;
                while((message = reader.readLine())!= null){
                    if(message.length() == 0) break;
                    System.out.println(message);
                }
                System.out.println("接收到来至:" + socket.toString() + "的数据");
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

服务器端启动:
在这里插入图片描述
使用浏览器与服务器端交互
localhost:8888
在这里插入图片描述回到服务器端查看输出:
在这里插入图片描述
浏览器与服务器端建立连接成功,并遵循HTTP协议发出请求数据包:
在这里插入图片描述
HTTP协议中请求数据头通常包括四个部分:

  1. 请求行,包括:请求类型,资源路径以及HTTP版本等信息。
  2. 请求头部,紧接着请求行之后的部分,用来说明服务器要使用的附加信息。
  3. 空行,请求头部后面的空行,是必须的。
  4. 请求数据,也叫主体,可以添加任何数据。

在这个例子中请求数据为空。

在上面,浏览器与服务器端交互时,提示网页无法运行。

这是因为,服务器端没有对浏览器发出的请求做出响应。我们需要在服务器端编写响应浏览器的代码。

public class Server {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务器启动==========");

        while(!serverSocket.isClosed()){
            Socket socket = serverSocket.accept();  //阻塞,等待连接

            System.out.println("与 " + socket.toString() + "连接成功");
            try{
                // I/O
                InputStream inputStream = socket.getInputStream();      //接收数据流
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));

                String message;
                while((message = reader.readLine())!= null){
                    if(message.length() == 0) break;
                    System.out.println(message);
                }
                System.out.println("接收到来至:" + socket.toString() + "的数据");


                OutputStream outputStream = socket.getOutputStream();
                outputStream.write("HTTP/1.1 200 OK\r\n".getBytes());
                outputStream.write("Content-Length:11\r\n\n".getBytes());
                outputStream.write("Hello World!".getBytes());
                outputStream.flush();
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

浏览器重新访问:localhost:8888
在这里插入图片描述
得到响应结果。

附:HTTP协议——响应状态码

  • 1XX(临时响应)

表示临时响应并需要请求者继续执行操作的状态代码

  • 2XX(成功)

表示成功处理了请求的状态代码。

  • 3XX(重定向)

表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。

  • 4XX(请求错误)

这些状态代码表示请求可能出错,妨碍了服务器的处理。

  • 5XX(服务器错误)

这些状态代码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

目录
相关文章
|
5天前
|
运维 Prometheus 监控
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
|
25天前
|
机器学习/深度学习 人工智能 运维
企业内训|LLM大模型在服务器和IT网络运维中的应用-某日企IT运维部门
本课程是为某在华日资企业集团的IT运维部门专门定制开发的企业培训课程,本课程旨在深入探讨大型语言模型(LLM)在服务器及IT网络运维中的应用,结合当前技术趋势与行业需求,帮助学员掌握LLM如何为运维工作赋能。通过系统的理论讲解与实践操作,学员将了解LLM的基本知识、模型架构及其在实际运维场景中的应用,如日志分析、故障诊断、网络安全与性能优化等。
56 2
|
30天前
|
存储 安全 数据可视化
提升网络安全防御有效性,服务器DDoS防御软件解读
提升网络安全防御有效性,服务器DDoS防御软件解读
42 1
提升网络安全防御有效性,服务器DDoS防御软件解读
|
11天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
14天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
17天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
191 2
|
1月前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
461 1
|
1月前
|
域名解析 缓存 负载均衡
网络浏览器并输入地址到显示的整个过程
网络浏览器并输入地址到显示的整个过程
|
1月前
|
网络协议 Java API
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
61 2
|
1月前
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
52 2

热门文章

最新文章