day39-网络编程01

Java网络编程01

1.网络相关的概念

1.1网络通信和网络

  • *网络通信

  • 概念:两台设备之间通过网络实现数据传输

  • 网络通信:将数据通过网络从一台设备传输到另一台设备
  • java.net包下提供了一系列的类和接口,供程序员使用,完成网络通信

  • *网络

  • 概念:两台或多台设备通过一定物理设备连接起来构成了网络

  • 根据网络的覆盖范围不同,对网络进行分类:
  • 局域网:覆盖范围最小,仅仅覆盖一个教室或者一个机房
  • 城域网:覆盖范围较大,可以覆盖一个城市
  • 广域网:覆盖范围最大,可以覆盖全国甚至全球,万维网是广域网的代表

1.3ip地址和地址分类

  • *ip地址

  • 概念:用于 唯一标识网络中的每台计算机/主机

  • 查看ip地址:ipconfig
  • ip地址的表示形式:点分十进制 xx.xx.xx.xx
  • 每一个十进制数的范围:0~255

day39-网络编程01
  1. ip地址的组成 = 网络地址+主机地址 ,比如:192.168.16.69
  2. IPv6是互联网工程任务组设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编上一地址。

    IPv6使用128位bit(16个字节)表示地址,相当于IPv4地址长度的4倍

  3. IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不仅能够解决网络地址资源数量的问题,而且也解决了多种计入设备连入互联网的障碍

  4. *ipv4地址分类

    day39-网络编程01day39-网络编程01

特殊的:127.0.0.1表示本机地址

1.4域名和端口

  • *域名

  • 域名的好处:为了方便记忆,解决记忆ip的困难

  • 概念:将ip地址映射成域名[DNS]

  • *端口

  • 概念:用于标识计算机上某个特定的网络程序

day39-网络编程01
  1. 表示形式:以整数形式,端口范围0~65535[2个字节表示端口 0~2^16-1]
  2. 0~1024已经被占用,比如ssh 22,ftp 21,smtp 25,http 80

    在网络开发中,不要使用到0~1024的端口

  3. 常见的网络程序端号:

  4. tomcat : 8080

  5. mysql: 3306
  6. oracle: 1521
  7. sqlserver: 1433

1.5网络通信协议

  • *简单的协议理解:

网络协议通俗地讲就是网络上两台计算机之间通信 所要遵守的共同标准

这么讲还是不够通俗易懂,所以我们可以打个比方:

有两个人,一个中国人,一个法国人,如下:

            (用英语交流)

 中国人------------------------法国人

(讲中文)                   (讲法语)

[会英语]                      [会英语]

<英语协议>                   <英语协议>
</英语协议></英语协议>

这两个人要想交流,必须讲一门双方都懂的语言。如果大家都不会讲对方的民族语言,那么可以选择双方都懂的第三方的语言来交流,比如”讲英语”。那么这时候”英语”实际上就成为一种”网络协议”。

把网络协议比做通用语言只是一种形象比喻,实际上协议本身比自然语言要简单的多,但是却比自然语言更严谨。协议规定了一种交流信息的格式或者说规范,比如:字符”LOVE”表示什么意思,第2个字节表示什么含义等……只要大家都按同样的规范来表达自己的意思,对方就能”听懂”你的意思。

同一种”规范”遵守的人多了,就成为一种事实上的”标准”。比如TCP/IP协议就成为了一种最流行的网络协议。

初学者如何理解网络协议? – Tsingke – 博客园 (cnblogs.com)

  • TCP/IP协议 TCP/IP 是 Transmission Control Protocol/Internet Protocol 的简写,中文名译为 传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础。简单的说,就是由网络层的IP协议和传输层的TCP协议组成的。
  • *数据进入协议栈时的封装/解封过程:
    day39-网络编程01

day39-网络编程01
  • *网络通信协议:
    day39-网络编程01

注意:传输层虽然叫TCP层,但是并不只有TCP一个协议,只是因为TCP用的最多,网络层同理

在现实中真正使用的是TCP/IP模型,这四层对应上面的协议封装/解封过程

1.6TCP和UDP

  • TCP协议:传输控制协议
  • 使用TCP协议前,需先建立TCP连接,形成传输数据通道
  • 传输前,采用”三次握手”方式,是 可靠的
  • TCP协议进行通信的两个应用进程:客户端、服务端
  • 在连接中可进行大数据量的传输
  • 传输完毕,需释放已经建立的连接, *效率低

三次握手的目的是建立可靠的通信通道,说到通信,简单来说就是数据的发生与接收,而 三次握手最主要的目的就是双方确认自己与对方的发送与接收是否正常

  • UDP协议:用户数据协议
  • 将数据、源、目的封装成数据包,不需要建立连接
  • 每个数据报的大小限制在 64k内,不适合传输大量数据
  • 应无需连接,故是 不可靠的
  • 发送数据结束时,无需释放资源(因为不是面向连接的), 速度快
  • 举例:类似于学校广播通知,不能确定你个人是否听到了

2.InetAddress类

  • 相关方法:
  • getLocalHost :获取本机的InetAddress对象
  • getByName:根据指定主机名/域名 获取ip地址对象
  • getHostName:通过 InetAddress 对象,获取相应的主机名
  • getHostAddress:通过 InetAddress 对象,获取相应的地址

例子:

package li.network;

import java.net.InetAddress;
import java.net.UnknownHostException;

//演示 InetAddress 类的使用
public class API_ {
    public static void main(String[] args) throws UnknownHostException {
        // 1.getLocalHost:获取本机的 InetAddress 对象
        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println(localHost);//LAPTOP-32SOPQVL/192.168.237.1

        //getByName
        // 2.1 :根据指定的主机名,获取 InetAddress对象
        InetAddress host1 = InetAddress.getByName("LAPTOP-32SOPQVL");
        System.out.println("host1="+host1);//host1=LAPTOP-32SOPQVL/192.168.237.1

        // 2.2 根据域名 获取ip地址对象  example:www.baidu.com
        InetAddress host2 = InetAddress.getByName("www.basidu.com");
        System.out.println("host2="+host2);//host2=www.basidu.com/8.210.41.100

        // 3.getHostAddress:通过InetAddress对象,获取相应的地址
        String hostAddress = host2.getHostAddress();//IP地址
        System.out.println("host2对应的ip地址="+hostAddress);//host2对应的ip地址=8.210.41.100

        // 4.getHostName:通过 InetAddress 对象,获取对应的主机名或者域名
        String hostName = host2.getHostName();
        System.out.println("host2对应的主机名/域名="+hostName);//host2对应的主机名/域名=www.basidu.com

    }
}

day39-网络编程01

3.Socket

基本介绍:

  1. 套接字(Socket)开发网络应用程序被广泛采用,以至于成为事实上的标准
  2. 通信的两端都要有Socket,是两台机器间通信的端点
  3. 网络通信其实就是Socket间的通信
  4. Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输
  5. 一般主动发起通信的应用程序属于客户端,等待通信请求的为服务端

day39-网络编程01

day39-网络编程01

客户端和服务器端通常情况下,是在不同主机的。但是也有可能在同一台主机上

Original: https://www.cnblogs.com/liyuelian/p/16703545.html
Author: 一刀一个小西瓜
Title: day39-网络编程01

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598576/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 连接数据库空异常

    解决过程(嫌麻烦可以直接看结论): 首先我以为是我的数据库驱动名字什么的没有写对,但是确实是对的,使用的是 com.mysql.cj.jdbc.Driver ,也没有发现多余的空格…

    数据库 2023年6月16日
    083
  • OA系统模块设计方案

    `1.模型管理 :web在线流程设&#x…

    数据库 2023年6月6日
    078
  • MYSQL–>多表查询

    多表之间的关系 一对多(多对一) 如多个员工都属于一个部门的关系 实现方式:在多的一方建立外键连接少的一方 多对对 如学生与课程表之间的关系 实现方式:在学生与课程表之间建立第三方…

    数据库 2023年6月14日
    0101
  • python自动安装mysql5.7

    python版本:python2.6 centos版本:centos6.9 mysql版本:mysql5.7.19 安装目录路径和数据目录路径都是固定,当然也可以自己修改 这个脚本…

    数据库 2023年6月9日
    0163
  • Postgres14.4(Docker安装)

    Postgres14.4(Docker安装) 一,Docker拉取镜像 docker pull postgres:14.4 #检查镜像是否拉取成功 docker images | …

    数据库 2023年6月11日
    0104
  • Docker 从入门到入土

    1、Docker简介 1.1 虚拟化技术 介绍 Docker之前有必要了解一下虚拟化技术,其实Docker的出现也是虚拟机技术发展的一个里程碑。随着企业业务量的不断提升,需要横向的…

    数据库 2023年6月6日
    082
  • 并发事务问题与事务隔离级别

    1.并发事务问题 1)脏读:一个事物读到另一个事务还没有提交的数据。 2)不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。 3)幻读:一个事务按照条…

    数据库 2023年5月24日
    086
  • markdown语法备忘-七星海棠

    posted @2022-03-31 15:52 七星海棠^_~ 阅读(5 ) 评论() 编辑 Original: https://www.cnblogs.com/qixingha…

    数据库 2023年6月11日
    066
  • 操作线程的方法

    操作线程的方法操作线程有很多方法,这些方法可以使线程从某一种状态过渡到另一种状态。 线程的休眠能控制线程行为的方法之一是调用sleep()方法,sleep()方法可以指定线程休眠的…

    数据库 2023年6月16日
    079
  • python threading args参数报错must be an iterable, not int,解决方法

    错误代码: thread.append(threading.Thread(target=as_same_time, args=(0))) 分析: 因为as_same_time方法只…

    数据库 2023年6月11日
    078
  • MAC Golang环境搭建

    下载golang 下载地址:https://golang.google.cn/dl/ 根据MAC左上角苹果图标->关于本机,即可查看芯片类型 安装golang 在 下载 中双…

    数据库 2023年6月14日
    090
  • 云上RDS架构

    概述 越来越多的企业选择上云,最基础的云服务就是IaaS(Infrastructure as a Service)服务,直观理解就是虚拟主机,用户不用再自建机房,自己购买服务器,而…

    数据库 2023年6月9日
    0107
  • 5_SpringMVC

    一. 什么是MVC框架 MVC全名是Model View Controller, 是模型(model), 视图(view), 控制器(controller)的缩写, 一种软件设计典…

    数据库 2023年6月11日
    0100
  • 05-ElasticSearch高级搜索

    * package com.coolman.hotel.test; import com.coolman.hotel.pojo.HotelDoc; import com.faste…

    数据库 2023年6月16日
    085
  • 红黑树

    2-3-4树 JAVA技术交流群:737698533 定义 所有的叶子节点都拥有相同的深度 节点只能是2-节点,3-节点,或者4-节点 2节点 包含一个元素的节点,有两个子节点 3…

    数据库 2023年6月16日
    066
  • 调试Archery连接SQL Server提示驱动错误

    当我们在调试Archery的时候,连接SQL Server 会报错,而MySQL部分没有问题。报错信息如下: Error: (‘01000’, "[01000] [uni…

    数据库 2023年6月16日
    0137
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球