• JAVA 网络编程(这章还有后续哦)


    目录

    一.认识网络

    1. 网络的概念和分类

    2. 网络分层模型

     二.IP地址

    1. IP地址概述

    (1)IP地址的组成

    (2)IP地址的分类

    3. IP地址的配置和检测

    (1)IP地址的配置

    (2)IP地址的检测

    三.端口、域名、DNS、网络服务器、协议

    1. 端口

    2. 域名和DNS域名解析

    3. 网络服务器

    (1)邮件服务器

    (2)Web服务器

    3)Tomcat服务器

    4. 网络通信协议

    四.Socket

    1. Socket概述

    2. Socket通信原理

    3. java.net包


     

    一.认识网络

    1. 网络的概念和分类

     

    (1)简单来说,网络就是连接在一起共享数据和资源的一组计算机。

    (2)分布在不同地里区域的计算机与专门的外部设备通过通信线路互连在一起,形成一个规模

    大、功能强大的网络系统,从而使众多的计算机可以方便地互相传递信息、共享信息资源。 

    (3)计算机网络旨在实现数据通信。数据可以有多种形式,如文本、图片或声音。

    (4)进行数据通信的两台计算机可以相距很近(如同一间办公室),也可以在地理位置上相隔很

    远(如不同的国家)。 

    (5)按照地理覆盖范围,计算机网络可以分为局域网、城域网和广域网。

    --》局域网

    局域网(LAN)局限在很小的地理区域内或单独的建筑物物内,被用于连接公司办公室、实验室或

    工厂里的个人计算机和工作站。 

    --》城域网

    城域网(MAN)覆盖城市或城镇内的广大地理区域,是在一个城市范围内建立的计算机通信网。

    --》广域网

    广域网(WAN)是一个更广泛的地理范围内所建立的计算机通信网,其范围可以超越城市和国家

    以至全球,因而对通信的要求及复杂性都比较高。 

    2. 网络分层模型

    (1)如同一个公司的组织架构一样,网络上的信息传递,也是由不同的层级负责不同的工作任务。

    (2)国际化标准组织(International Standard Organization,ISO)于1984年颁布了开放系统互

    联(Open System Interconnection,OSI)参考模型。 

     (3)OSI参考模型是一个开放式体系结构,它规定将网络分为7层,每一层在网络信息传递中都发

    挥不同的作用

    (4)另外一个著名的模型是TCP/IP模型。TCP/IP是传输控制协议/网络互联协议(Transmission

    Control Protocol/Internet Protocol)的简称。 

    (5)早期的TCP/IP模型是4层结构,在后来的使用过程中,借鉴OSI的7层参考模型,将网络接口

     层划分为物理层和数据链路层,形成新的5层结构。

     二.IP地址

     

    1. IP地址概述

    (1)要实现两台计算机之前的通信,双方都要具有地址。

    (2)在网络中使用一种具有层次结构的逻辑地址来标识一台主机,这个地址称为IP地址。

    (3)IP地址用来唯一标识网络中的每一台计算机。

    (4)IP地址目前存在IPv4和IPv6两种标准

     2. IP地址的组成和分类

    (1)IP地址的组成

    -->IPv4地址有32位,由4个8位的二进制组成,每8位之间用圆点隔开,如

    11000000.10101000.00000010.00010100。 

    -->由于二进制不便记忆且可读性较差,所以通常都把二进制数转换成十进制数表示,如

    192.168.2.20。 

    -->因此一个IP地址通常由3个点号分开的4个十进制数表示,称为点分十进制。

    -->IPv6地址有128位,由8个16位的无符号数组成,每个整数用4个十六进制数表示,这些数之间

    用冒号(:)分开。例如3ffe:3201:1401:1280:c8ff:fe4d:db39:1988。

    (2)IP地址的分类

    -->IP地址包含网络地址和主机地址两部分。网络地址决定了可以分配的最大网络数,主机地址决定了一个网络中可以存在的计算机最大数量。

    -->IP地址的网络地址由互联网数字分配机构(The Internet Assigned Numbers Authority,IANA)统一分配,以保证IP地址的唯一性。

    -->IANA将IP地址分为A、B、C、D、E共五类,并规定每个类别网络地址和主机地址的长度   

     --》A类IP地址:第一组数字表示网络地址,其余三组表示主机地址。A类地址的第一个十进制数的有效取值范围为1~126。

        --》B类IP地址:前两组数字表示网络地址,其余两组表示主机地址。B类地址的第一个十进制数的有效取值范围为128~191。

        --》C类IP地址:前三组数字表示网络地址,其余一组表示主机地址。C类地址的第一个十进制的有效取值范围为192~223。

        --》D类IP地址:不分网络地址和主机地址,用于组播通信,不能在互联网上作为节点地址使用。D类地址的第一个十进制数的有效取值范围为224~239。

        --》E类IP地址:不分网络地址和主机地址,用于科学研究,也不能在互联网上作为节点地址使用。E类地址的第一个十进制数的有效取值范围为240~254。

    -->除了上述五类IP地址之外,还有一些特殊的IP地址,例如:

        --》0.0.0.0:表示本机

        --》127.0.0.1:表示本机回环地址,通常用在本机ping此地址来检车TCP/IP协议安装是否正确。

        --》255.255.255.255:表示当前子网,一般用于向当前子网广播信息。


    3. IP地址的配置和检测

     

    (1)IP地址的配置

    -->打开“控制面板”窗口,双击“网络连接”图标。

    -->双击“本地连接”图标,打开“本地连接状态”对话框。

    -->单击“属性”按钮,打开“本地连接属性”对话框。

    -->勾选“Internet协议版本(IPv4)”复选框并单击“属性”按钮,打开“Internet协议版本4

    (TCP/IPv4)属性”对话框。 

    -->选中“使用下面的IP地址”单选按钮并输入IP地址、子网掩码和默认网关(你的网络中连接带其它

    网络的计算机或路由器)。 

    -->选中“使用下面的DNS服务器地址”单选按钮并输入DNS地址。

    -->单击“确定”按钮完成设置。

    注意:实际应用中,在配置局域网(支持DHCP服务)中计算机的IP地址时,为了避免人为输入产

    生地址冲突的错误,通常选中“自动获得IP地址”单选按钮。 

    (2)IP地址的检测

    设置了IP地址之后,可能出现网络连接不通的故障,可以使用几个经典的DOS命令。

    -->使用ipconfig命令或ipconfig /all命令来查看本机的IP地址、子网掩码、默认网关等信息,判断

    TCP/IP属性设置是否正确。 

    -->使用ping命令测试网络是否通畅,检测故障原因。ping命令的语法格式:ping 目标IP地址

    --》ping 本机回环地址,检测IP设置是否正确。

    --》ping 默认网关IP地址,检验连接是否通畅。

    --》ping 某一远程计算机IP地址,测试是否可以和远程主机正常通信。

    三.端口、域名、DNS、网络服务器、协议

    1. 端口

    (1)网络中的一台计算机通常可以使用多个进程同时提供网络服务。

    (2)因此除了IP地址,每台主机还有若干个端口号,用于在收发数据时区分该数据发给哪个进程

    或者是从哪个进程发出的。 

    (3)端口是计算机与外界通信的入口和出口,它是一个16位的整数,范围是0~65535。

    (4)同一台主机上,任何两个进程不能同时使用同一个端口。

    2. 域名和DNS域名解析

    (1)IP地址从来唯一定位一台计算机,也就是说只能通过IP地址才能找到一台网络中的主机。

    (2)但是我们在上网时输入网址就能获得这个远程的Web服务器提供的资源,并没有输入IP地

    。因为有域名系统DNS(Domain Name System)将域名映射为它的IP地址。 

    (3)DNS服务器解析域名的过程:

    -->在浏览器中输入域名www.taobao.com,主机在向www.taobao.com发出请求之前要先知道它的

    IP地址。 

    -->主机会调用域名解析程序,向设定的DNS服务器发送信息,请求获得www.taobao.com的IP地

    址。 

    -->如果本地DNS服务器没有存储相应的信息,它会发发送信息到根DNS服务器获得.com DNS服务

    器的IP。 

    -->向.com DNS服务器发送查询请求获得taobao.com DNS服务器的IP地址,获得www.taobao.com

    的IP地址。 


    3. 网络服务器

     

    网络服务器通常是指在网络环境下,具有较高计算能力,能够为用户提供特殊服务功能的计算机。

    (1)邮件服务器

    -->邮件服务器是一种用来负责电子邮件收发管理的设备。

    -->邮件服务器构成了电子邮件系统的核心,负责网络中电子邮件的定位和收发管理工作。

    -->邮件服务器的工作遵循一定的工作协议,通过对这些协议的遵守,世界各地的邮件服务器才能

    统一工作,共同管理网络中庞大的电子邮件的传送。 

    (2)Web服务器

    -->Web服务器也称为WWW服务器,主要功能是提供网上信息浏览服务。

    -->Web服务器不仅能够存储信息,还能通过Web浏览器为用户在提供信息的基础上运行脚本和程

    序。 

    1)Microsoft IIS

    --》Microsoft的Web服务器产品为Internet Information Server(IIS)。

    --》IIS是允许在公共Intranet或Internet上发布信息的Web服务器。

    --》IIS提供了一个图形化界面的管理工具,称为Internet服务器管理器,可用于监视配置和控制

    Internet。 

    2)Apache服务器

    --》Apache仍然是世界上用得最多的Web服务器。

    --》它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运

    行在绝大多数的UNIX、Windows、Linux操作系统平台上)以及它的可移植性等方面。 

    3)Tomcat服务器

    --》Tomcat是一个开放源代码、运行Servlet和JSP Web应用软件的基于Java的Web应用服务器。

    --》Tomcat Server是根据Servlet和JSP规范执行的,因此可以说Tomcat Server也遵循了Apache-

    Jakarta规范且比绝大多数商业应用软件服务器好用。 

    --》Tomcat是基于Apache许可证下开发的自由软件,因此目前许多Web服务器都采用Tomcat。

    -->另外,还有IBM的WebSphere、BEA的WebLogic等,也是市面上比较常见的Web服务器。

    4. 网络通信协议

    -->网络通信协议是为了在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合。

    -->网络通信协议规定了网络通信时,数据必须采用的格式以及这些格式的意义。

    -->网络编程时,常用的网络协议有以下几种:

    (1)TCP/IP协议族

    --》TCP/IP是Transmission Control Protocol/Internet Protocol的简称。

    --》它是用于计算机网络通信的协议集,即协议族。

    --》该协议族是Internet最基本的协议,它不依赖于任何特定的计算机硬件或操作系统,提供开放的

    协议标准。 

    --》目前,绝大多数的网络操作系统都提供对TCP/IP协议族的支持,它已经成为Internet的标准协

    议。 

    --》TCP/IP协议包括IP协议、TCP协议、UDP协议和ARP协议等诸多协议,其核心协议是IP协议和

    TCP协议,所以有时也将TCP/IP协议简称为TCP/IP协议。 

    (2)TCP协议

    --》TCP是Transmission Control Protocol的简称,中文名称为传输控制协议。

    --》TCP是一种面向连接、可靠的、基于字节流的传输层通信协议。

    --》TCP要求通信双方必须建立连接后才开始通信,通信双方可以同时进行数据传输,它是全双工

    的,从而保证了数据的正确传送。 

    (3)UDP协议

    --》UDP是User Datagram Protocol的简称,中文名称为用户数据报协议。

    --》UDP协议是一个无连接协议,在数据传输之前,客户端和服务器并不建立和维护连接。

    --》UDP协议的主要作用是把网络通信的数据压缩为数据报的形式。

    四.Socket

     

    1. Socket概述

    (1)Java最初是作为网络编程语言出现的,它对网络的高度支持,使得客户端和服务器端流畅的

    沟通成为现实。 

    (2)在网络编程中,使用最多的就是Socket,每一个实用的网络程序都少不了它的参与。

    (3)在计算机网络编程技术中,两个进程或者说两台计算机可以通过一个网络通信连接实现数据

    的交换,这种通信链路的端点就被称为“套接字”(英文名称也就是Socket)。 

    (4)Socket是网络驱动层提供给应用程序的一个接口或者说一种机制。

    (5)使用物流送快递的例子来说明Socket:

    -->发件人将有收货人地址信息的货物送到快递站,发件人不用关心物流是如何进行的,货物被送

    到收货人所在地区的快递站点,进行配送,收货人等待收货就可以了。 

    -->这个过程很形象地说明了信息在网络中传递的过程。其中,货物就是数据信息,2个快递站点就

    是2个端点Socket。 

    (6)信息如何在网络中寻址传递,应用程序并不用关心,只负责准备发送数据和接收数据即可。

     

    2. Socket通信原理

    (1)对于编程人员来说,无须了解Socket底层机制是如何传送数据的,而是直接将数据提交给

    Socket,Socket会根据应用程序提供的相关信息,通过一系列计算,绑定IP及信息数据,将数据交

    给驱动程序向网络上发送。  

    (2)Socket的底层机制非常复杂,Java平台提供了一些简单但是强大的类,可以简单有效地使用

    Socket开发通信程序而无须了解底层机制。 


    3. java.net包

    (1)java.net包提供了若干支持基于套接字的客户端/服务器通信的类。

    (2)java.net包中常用的类有SocketServerSocket、DatagramPacket、DatagramSocket、

    InetAddress、URL、URLConnection和URLEncoder等。 

    (2)为了监听客户端的连接请求,可以使用ServerSocket类。

    (3)Socket类实现用于网络上进程间通信的套接字。

    (4)DatagramSocket类使用UDP协议实现客户端和服务器套接字。

    (5)DatagramPacket类使用DatagramSocket类的对象封装设置和收到的数据报。

    (6)InetAddress类表示Internet地址。

    (7)在创建数据报报文和Socket对象时,可以使用InetAddress

    4.socket用法

    1.客户端

    1. package com.qn.kehu;
    2. import java.io.BufferedReader;
    3. import java.io.IOException;
    4. import java.io.InputStream;
    5. import java.io.InputStreamReader;
    6. import java.io.OutputStream;
    7. import java.io.Reader;
    8. import java.net.Socket;
    9. import java.net.UnknownHostException;
    10. public class Client {
    11. /*
    12. * 客户端通过输出流向服务器发送请求信息
    13. * 服务器端通过输入流接收客户端发送的请求信息
    14. * 服务器端通过输出流向客户端发送响应信息
    15. * 客户端通过输入流接收服务器端发送的响应信息
    16. */
    17. public static void main(String[] args) {
    18. Socket socket = null;
    19. OutputStream os =null;
    20. InputStream is =null;
    21. Reader reader =null;
    22. BufferedReader br = null;
    23. try {
    24. //创建Socket对象
    25. socket = new Socket("127.0.0.1", 10088);
    26. //获取输出流
    27. os = socket.getOutputStream();
    28. //向服务器发送请求信息
    29. String str = "我是客户端,我想问你一个问题";
    30. byte[] bytes =str.getBytes();
    31. os.write(bytes);
    32. //关闭套接字的输出流
    33. socket.shutdownOutput();
    34. //接收服务器端发送过来的响应消息
    35. is = socket.getInputStream();
    36. reader = new InputStreamReader(is);
    37. br = new BufferedReader(reader);
    38. String repety =br.readLine();
    39. System.out.println(repety);
    40. } catch (UnknownHostException e) {
    41. e.printStackTrace();
    42. } catch (IOException e) {
    43. e.printStackTrace();
    44. }finally{
    45. try {
    46. br.close();
    47. reader.close();
    48. is.close();
    49. os.close();
    50. socket.close();
    51. } catch (IOException e) {
    52. // TODO Auto-generated catch block
    53. e.printStackTrace();
    54. }
    55. }
    56. }
    57. }

    2.服务器端

    1. package com.qn.kehu;
    2. import java.io.BufferedReader;
    3. import java.io.IOException;
    4. import java.io.InputStream;
    5. import java.io.InputStreamReader;
    6. import java.io.OutputStream;
    7. import java.io.Reader;
    8. import java.net.ServerSocket;
    9. import java.net.Socket;
    10. public class Service {
    11. public static void main(String[] args) {
    12. // 创建ServerSocket对象
    13. ServerSocket ss = null;
    14. Socket socket = null;
    15. InputStream is = null;
    16. Reader reader = null;
    17. BufferedReader br = null;
    18. OutputStream os = null;
    19. try {
    20. ss = new ServerSocket(10088);
    21. // 服务器怎么知道客户端发送了请求呢?服务器要一直侦听客户端的请求
    22. socket = ss.accept();
    23. // 侦听客户端的请求得到一个Socket对象,就可以通过该对象获得输入流,得到客户端的请求信息
    24. is = socket.getInputStream();
    25. reader = new InputStreamReader(is);
    26. br = new BufferedReader(reader);
    27. String str = br.readLine();
    28. System.out.println(str);
    29. // 服务器向客户端发送一个响应信息
    30. os = socket.getOutputStream();
    31. String info = "我是服务器端,我已经收到了你的请求信息";
    32. byte[] bytes = info.getBytes();
    33. os.write(bytes);
    34. } catch (IOException e) {
    35. e.printStackTrace();
    36. } finally {
    37. try {
    38. os.close();
    39. br.close();
    40. reader.close();
    41. is.close();
    42. socket.close();
    43. ss.close();
    44. } catch (IOException e) {
    45. // TODO Auto-generated catch block
    46. e.printStackTrace();
    47. }
    48. }
    49. }
    50. }

  • 相关阅读:
    C#/Unity3D 单例模板(单例属性模板)
    YOLOv8 改进原创 HFAMPAN 结构,信息高阶特征对齐融合和注入,全局融合多级特征,将全局信息注入更高级别
    Redis与分布式:哨兵模式
    从0开始回顾Mysql --- MySQL初体验
    Android AMS——创建Application(七)
    动态代理模式下UndeclaredThrowableException的产生
    【前端必会】走进webpack生命周期,另类的学习方法
    如何看待人工智能行业发展
    【Copilot】登录报错 Extension activation failed: “No auth flow succeeded.“(VSCode)
    tsf consul单独使用,可以在tsf部署不
  • 原文地址:https://blog.csdn.net/m0_67979925/article/details/127622269