首页 > 编程语言 >JavaSE的小结10

JavaSE的小结10

时间:2024-09-30 21:22:45浏览次数:10  
标签:10 outputStream 浏览器 网络 IP地址 JavaSE 小结 端口号 客户端

第1章-第10节

一、知识点

网络编程。

二、目标

  1. 理解前后端交互过程。

  2. 掌握网络编程的基本概念。

三、内容分析

  1. 重点

    • 网络编程基本概念。

    • 前后端交互过程。

  2. 难点

    • 前后端交互过程。

四、内容

1、网络编程

网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。

2.1 软件结构
  1. C/S结构

客户端——服务器

Client —— Server

客户端和服务器结构。如QQ、迅雷等。

  1. B/S结构

浏览器——服务器

Browser——Server

浏览器和服务器结构。谷歌、火狐等。

2.2 网络通信协议
  1. 网络通信协议:通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据的交换。

  2. TCP/IP协议:传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。


2.3 网络编程三要素
2.3.1协议

计算机网络通信必须遵守的规则。

https比http更加安全,多了一个证书

2.3.2 IP地址

互联网协议地址(Internet Protocol Address),俗称IP。IP地址用来给一个网络中的计算机设备做唯一的编号。假如我们把“个人电脑”比作“一台电话”的话,那么“IP地址”就相当于“电话号码”。

  1. 分类

  • IPv4:是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d 的形式,例如192.168.65.100 。其中a、b、c、d都是0~255之间的十进制整数,那么最多可以表示42亿个。

  • IPv6:由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,号称可以为全世界的每一粒沙子编上一个网址,这样就解决了网络地址资源数量不够的问题。

ip -> 域名

192.168.1.1 -> www.baidu.com

IPv4不够用怎么办?

1.虚拟网络(局域网)

2.IPv6:多的用不完

  1. 常用命令【window+r】

  • 查看本机IP地址,在cmd终端输入

    ipconfig
  • 检查网络是否连通,在cmd终端输入

    ping 空格 IP地址
    ping xxx.xx.xx.xx
  1. 特殊的IP地址

本机IP地址:127.0.0.1localhost

(环回ip)

2.3.3 端口号

网络的通信,本质上是两个进程(应用程序)的通信。每台计算机都有很多的进程,那么在网络通信时,如何区分这些进程呢?

如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的进程(应用程序)了。

端口号:用两个字节表示的整数,它的取值范围是0~65535。其中,0~1023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。

2.3.4 总结

利用协议+IP地址+端口号 三元组合,就可以标识网络中的进程了,那么进程间的通信就可以利用这个标识与其它进程进行交互。

当我们在浏览器输入www.baidu.com时,浏览器自动加上协议http或者https,网址通过 DNS 域名解析获取IP地址,根据IP地址找到对应的服务器,再根据访问的端口号找到对应的服务,当我们没有写端口号时默认端口号是80,服务最后再响应内容返回给浏览器,最后浏览器接收到内容展示出来。

我们在访问一个域名/网址的时候本质还是根据IP去找服务器,域名只是方便我们记忆使用,所以我们在浏览器输入14.215.177.39:80进行访问,返回的结果和访问www.baidu.com时一样。

2.4 TCP通信程序

在Java中,提供了两个类用于实现TCP通信程序:

  1. 客户端:java.net.Socket 类表示。创建Socket对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。

  2. 服务端:java.net.ServerSocket 类表示。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接。

下面使用ServerSocket实现浏览器访问服务器的效果:

启动服务之后,使用浏览器访问 http://localhost:8080/login, 浏览器显示【登录成功】,

使用浏览器访问 http://localhost:8080/register, 浏览器显示【注册成功】。

解析:我们使用http协议进行访问服务器,访问IP地址是我们自己的电脑,即localhost;访问的程序是8080端口对应的程序,即ServerSocket开启的端口;我们再解析请求路径,根据不同的请求路径响应不同的内容。

public static void main(String[] args) throws IOException {
​
        // 创建一个web服务对象(服务端),设置端口号为8080
        ServerSocket server = new ServerSocket(8080);
​
        while (true) {
            try {
                // 获取一个客户端对象,客户端传输过来的数据都在里面
                Socket socket = server.accept();
​
                System.out.println("服务端被请求了!!");
​
                // 数据传输 => 获取输入流
                InputStream input = socket.getInputStream();
                
                //利用字节数组熟读数据
                //int result;
                //byte[] bt = new byte[1024];
                //if ((result = input.read(bt)) != -1){
                //   System.out.println(new String(bt,0,result));
                //}
​
                //读取客户端内容并输出在控制台,转化为字符流进行操作
                BufferedReader br = new BufferedReader(new InputStreamReader(input));
                String path = br.readLine().split(" ")[1];
                System.out.println(path);
                
                // 获取输出流,给客户端响应内容
                OutputStream outputStream = socket.getOutputStream();
                
                //通信协议是1.1版本,200是状态码,\r\n是换行符
                outputStream.write("HTTP/1.1 200 OK\r\n".getBytes());
                // 返回的内容默认utf8(字符集编码)的数据,但是浏览器不知道
                // 浏览器就会按照系统默认,中文系统编码GBK
                // 使用GBK的编码去解析utf8的数据
                outputStream.write("Content-type:text/html;charset=utf8\r\n".getBytes());
                outputStream.write("\r\n".getBytes());
​
                if("/login".equals(path)) {
                    outputStream.write("登录成功".getBytes());
                } else if("/register".equals(path)) {
                    outputStream.write("注册成功".getBytes());
                }
​
                outputStream.close();
                socket.close();
          } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

标签:10,outputStream,浏览器,网络,IP地址,JavaSE,小结,端口号,客户端
From: https://blog.csdn.net/qq_40508161/article/details/142664059

相关文章

  • P10280 Cowreography G
    P10280CowreographyG贪心本题的证明中涵盖了多种证明方法:分类讨论,交换两个,整体策略,堪称贪心证明之典范符号约定令\(s_x\)表示最初字符串的不同\(1\)位置,\(t_x\)表示最终字符串的不同\(1\)位置Theorem1:交换\(a_i,a_j(i>j,a_i\nea_j)\)的最优步数为\(\lceil\fr......
  • CNN模型实现CIFAR-10彩色图片识别
    关于深度实战社区我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万+粉丝,拥有2篇国家级人工智能发明专利。社区特色:深度实战算法创新获取全部完整项目......
  • 题解:P11062 【MX-X4-T2】「Jason-1」加法
    考虑两种情况:\(a,b\)符号相同:考虑经过操作后\(a,b,\lverta-b\rvert\)会变成什么。:\(a\)\(b\)\(\lverta-b\rvert\)操作1\(a+b\)\(b\)\(\lverta\rvert\)操作2\(a\)\(a+b\)\(\lvertb\rvert\)可以看出只进行零次或一次操作后可以取到最小值......
  • Windows下安装Nessus 10.8.3安装破解教程
    1、下载:下载地址:https://www.tenable.com/downloads/nessus浏览器访问https://127.0.0.1:8834重点:Registeroffline,选择“ManagedScanner”,再选择“Tenablesecuritycenter”,最后一步设置账号密码,账号密码没要求。​​2、获取插件包2.1在命令行模式下(管理员身份运行),......
  • P6105 [Ynoi2010] y-fast trie
    这可能也是一个关于匹配的经典trick。题意给定常数\(C\),你需要维护一个集合\(S\),支持以下操作:1x,加入数\(x\),保证\(x\)之前不存在。2x,删除数\(x\),保证\(x\)之前存在。每次操作后你需要回答$$\max_{i,j\inS,i\not=j}(i+j)\bmodC$$\(Q\le5\times10^5\),强制在......
  • 长江存储致态TiPlus7100 4TB满盘读写测试:性能几乎没有下降
    一、前言:看看满盘状态下致态TiPlus71004TB性能会如何!现在还有很多同学对于长江存储品牌的存储产品不太信任,在选择SSD时会优先考虑三星、西数这样的品牌。有鉴于此,我们此次会将手上的长江存储致态TiPlus71004TBSSD进行更严苛测试,将SSD填入80%的数据,也就是在近乎满盘的状态下,看......
  • Java 中的5个代码性能提升技巧,最高提升近10倍
    Java中的5个代码性能提升技巧,最高提升近10倍 文章持续更新,可以关注公众号程序猿阿朗或访问未读代码博客。本文 Github.com/niumoo/JavaNotes 已经收录,欢迎Star。这篇文章介绍几个Java开发中可以进行性能优化的小技巧,虽然大多数情况下极致优化代码是没有必要的,但是作......
  • SCIE1000  Python and Communication
    SCIE1000 Semester 2, 2024Python and Communication Assignment1    The scenarioA new public science museum in St Lucia is developing an exhibit. A feature ofthe museum is that each exhibit item is accompanied by two expla......
  • 发现AI 黑科技,10个工程师的活1个人做?PLM系统还能这样用!
    什么???10个工程师的活1个人做?是的,没听错。小编发现一项最新AI黑科技,可以实现哦!根据订单的要求直接输入内容,AI会帮你生成改型设计图纸啦!!到底怎么做的???赶紧和我一起来看!AI之文生设计AI融合一举多得通过对设计场景进行重构,系统化整理改型设计知识,赋予AI设计核心逻辑,简化......
  • 缓存雪崩/穿透/击穿/失效原理图/14种缓存数据特征+10种数据一致性方案(专家篇)
    在当今数据驱动的互联网时代,缓存成为了提升应用性能的关键技术。面对海量用户请求,如何通过缓存策略有效减轻数据库压力、降低响应延迟?本文深入探讨了缓存雪崩、缓存穿透、缓存击穿等常见问题,并提供了全面的解决方案。通过实际案例分析,揭示了缓存设计的最佳实践,确保数据一致......