一篇文章带你爆杀Java-网络编程!

一、知识点

网络编程。

二、目标

  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协议

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

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,号称可以为全世界的每一粒沙子编上一个网址,这样就解决了网络地址资源数量不够的问题。

  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();
            }
        }
    }

五、小结

主要介绍在Java中如何实现服务功能,介绍网络编程中的基本概念,为后续的JavaWeb内容奠定基础。

六、练习

实现服务端,使用浏览器访问,并且返回内容。

1.做一个吃什么的网站服务?

// 输入127.0.0.1:8888/ 可以一直刷新菜名
// 输入127.0.0.1:8888/菜名  是可以显示菜名的制作方法
// 如果说没有菜名,就返回404 not found

 以上就是本文内容,相信你学完一定有所收获!

  • 26
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值