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

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

服务端代码:

//服务器端
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(服务器错误)

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

目录
相关文章
|
1天前
|
存储 安全 数据安全/隐私保护
Web应用程序的会话管理是一种跟踪和识别特定用户与Web服务器之间交互的技术
Python Web开发中,会话管理用于跟踪用户与服务器交互,如Flask框架提供的内置功能。以下是一个简单示例:安装Flask后,设置应用密钥,通过session读写用户状态。例如,创建一个显示和设置用户名称的Web应用,用户提交的名字将保存在会话中。在生产环境中,应安全存储密钥,如使用环境变量。扩展会话管理可借助第三方库实现更多功能,但可能需更多配置。
6 2
|
2天前
|
网络协议
LabVIEW中如何在网络上使用远程VI服务器
LabVIEW中如何在网络上使用远程VI服务器
|
3天前
|
监控 Linux 测试技术
LabVIEW网络服务器何使用,有哪些不同
LabVIEW网络服务器何使用,有哪些不同
|
4天前
|
JSON Android开发 数据格式
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
13 2
|
4天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
9 0
|
13天前
|
存储 数据处理 数据库
|
15天前
|
存储 网络安全 数据安全/隐私保护
【专栏】Python 网络设备管理中,`ConnectHandler`(Paramiko库)和`telnetlib`模块常用于设备交互。
【4月更文挑战第28天】Python 网络设备管理中,`ConnectHandler`(Paramiko库)和`telnetlib`模块常用于设备交互。`ConnectHandler`简化SSH连接,便于与网络设备交互,而`telnetlib`是Python内置模块,支持Telnet协议的远程登录操作。两者都提供命令执行和响应接收功能。示例代码展示了如何使用它们获取防火墙设备的版本信息,降低了代码复杂度,提高了可读性和维护性。
|
15天前
|
存储 缓存 网络协议
【专栏】理解并优化DNS设置对于提高网络速度至关重要
【4月更文挑战第28天】本文探讨了DNS服务器是否能加快网络访问速度。DNS负责将域名转换为IP地址,其查询时间、缓存机制和地理位置都影响网络速度。优化DNS配置,如选择快速的公共DNS服务、使用附近的服务器、确保设备正确配置和利用DNS缓存,都能有效提升网络体验。理解并优化DNS设置对于提高网络速度至关重要。
|
17小时前
|
弹性计算 运维 安全
阿里云ecs使用体验
整了台服务器部署项目上线
|
3天前
|
负载均衡 固态存储 Linux
阿里云轻量应用服务器、云服务器、gpu云服务器最新收费标准参考
轻量应用服务器、云服务器、gpu云服务器是阿里云服务器产品中,比较热门的云服务器产品类型,不同类型的云服务器产品收费模式与收费标准是不一样的,本文为大家展示这几个云服务器产品的最新收费标准情况,以供参考。
阿里云轻量应用服务器、云服务器、gpu云服务器最新收费标准参考