Java网络编程01

1.网络相关的概念

1.1网络通信和网络

  • 网络通信
  1. 概念:两台设备之间通过网络实现数据传输
  2. 网络通信:将数据通过网络从一台设备传输到另一台设备
  3. java.net包下提供了一系列的类和接口,供程序员使用,完成网络通信
  • 网络
  1. 概念:两台或多台设备通过一定物理设备连接起来构成了网络

  2. 根据网络的覆盖范围不同,对网络进行分类:

    • 局域网:覆盖范围最小,仅仅覆盖一个教室或者一个机房
    • 城域网:覆盖范围较大,可以覆盖一个城市
    • 广域网:覆盖范围最大,可以覆盖全国甚至全球,万维网是广域网的代表

1.3ip地址和地址分类

  • ip地址
  1. 概念:用于唯一标识网络中的每台计算机/主机
  2. 查看ip地址:ipconfig
  3. ip地址的表示形式:点分十进制 xx.xx.xx.xx
  4. 每一个十进制数的范围:0~255

  1. ip地址的组成 = 网络地址+主机地址 ,比如:192.168.16.69

  2. IPv6是互联网工程任务组设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编上一地址。

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

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

  • ipv4地址分类


特殊的:127.0.0.1表示本机地址

1.4域名和端口

  • 域名
  1. 域名的好处:为了方便记忆,解决记忆ip的困难
  2. 概念:将ip地址映射成域名
  • 端口
  1. 概念:用于标识计算机上某个特定的网络程序

  1. 表示形式:以整数形式,端口范围0~65535[2个字节表示端口 0~2^16-1]

  2. 0~1024已经被占用,比如ssh 22,ftp 21,smtp 25,http 80

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

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

  • tomcat : 8080
  • mysql: 3306
  • oracle: 1521
  • sqlserver: 1433

1.5网络通信协议

  • 简单的协议理解:

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

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

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

            (用英语交流)

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

(讲中文)                   (讲法语)

[会英语]                       [会英语]

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

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

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

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

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


  • TCP/IP协议

    TCP/IP 是 Transmission Control Protocol/Internet Protocol 的简写,中文名译为 传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础。简单的说,就是由网络层的IP协议和传输层的TCP协议组成的。

  • 数据进入协议栈时的封装/解封过程:

  • 网络通信协议:

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

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

1.6TCP和UDP

  • TCP协议:传输控制协议

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

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

  • UDP协议:用户数据协议

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

2.InetAddress类

  • 相关方法:

    1. getLocalHost :获取本机的InetAddress对象
    2. getByName:根据指定主机名/域名 获取ip地址对象
    3. getHostName:通过 InetAddress 对象,获取相应的主机名
    4. 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 }
}

3.Socket

3.1基本介绍

  1. 套接字(Socket)开发网络应用程序被广泛采用,以至于成为事实上的标准

  2. 通信的两端都要有Socket,是两台机器间通信的端点

  3. 网络通信其实就是Socket间的通信

  4. Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输

  5. 一般主动发起通信的应用程序属于客户端,等待通信请求的为服务端


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

3.2TCP编程通信

  • 基本介绍

    1. 基于客户端--服务端的网络通信
    2. 底层使用的是TCP/IP协议
    3. 应用场景举例:客户端发送数据,服务端接收并显示控制台
    4. 基于Scoket的TCP编程

day39-网络编程01的更多相关文章

  1. 网络编程01 · 艺

    Web Socket和Socket 套接字,实际就是传输层的接口.用于抽象传输层,隐藏细节.一对套接字可以进行通信. Web Socket,是基于TCP协议的.类似于,http. 为什么需要Web S ...

  2. python网络编程01 /C/S架构|B/S架构、网络通信原理、五层协议、七层协议简述、端口映射技术

    python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述.端口映射技术 目录 python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述. ...

  3. 【C++】 网络编程 01

    趁着计算机网络这门课布置了课程设计,学习下网络编程. 系统:Ubuntu 14.01... 1. 关于Socket(套接字) 1.1 套接字是存在于运输层和应用层间的抽象层,通过它来区分不同应用程序进 ...

  4. python网络编程-01

    python网络编程 1.socket模块介绍 ①在网络编程中的一个基本组件就是套接字(socket),socket是两个程序之间的“信息通道”. ②套接字包括两个部分:服务器套接字.客户机套接字 ③ ...

  5. 从零探索Java网络编程01之 TCP/IP 与 Socket

    最近完成了几项比较简单的项目, 终于是在996里偷了点闲暇时光, 想着来研究研究些啥吧?  一个普通的控制台日志映入了我的眼帘(孽缘呀): (图中使用 SpringBoot 的 log4j 来输出日志 ...

  6. python网络编程01

    1.什么是C/S架构? 客户端/服务器架构.实现服务端软件与客户端软件基于网络的通信. 2.互联网协议是什么?分别介绍五层协议中每一层的功能? 互联网协议是指用于互联网通信的规范.分为:osi七层.t ...

  7. 【网络编程01】socket的基础知识-简单网络通信程序

    1.什么是socket socket(套接字),简单来说是IP地址与端口(port)的组合,可以与远程主机的应用程序进行通信.通过IP地址可以确定一台主机,而通过端口则可以确定某一个应用程序.IP+端 ...

  8. Linux网络编程学习路线

    转载自:https://blog.csdn.net/lianghe_work/article 一.网络应用层编程   1.Linux网络编程01——网络协议入门 2.Linux网络编程02——无连接和 ...

  9. 01网络编程(基础知识+OSI七层协议+TCP与UDP)

    目录 01 网络编程 一.软件开发架构 1.1 CS架构 1.2 BS架构 二.网络理论前戏 2.1 简介 2.2 常见硬件 三.OSI七层协议(五层) 3.1 七层协议 3.2 五层协议 3.3 知 ...

随机推荐

  1. NC24724 [USACO 2010 Feb S]Chocolate Eating

    NC24724 [USACO 2010 Feb S]Chocolate Eating 题目 题目描述 Bessie has received \(N (1 <= N <= 50,000)\ ...

  2. kubectl 最新常用命令 --V1.24版本

    Kubectl 自动补全 BASH source <(kubectl completion bash) # 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completi ...

  3. 老掉牙的 synchronized 锁优化,一次给你讲清楚!

    我们都知道 synchronized 关键字能实现线程安全,但是你知道这背后的原理是什么吗?今天我们就来讲一讲 synchronized 实现线程同步背后的原因,以及相关的锁优化策略吧. synchr ...

  4. VScode中配置Java环境

    vscode 中配置Java环境 转载说明:本篇文档原作者[@火星动力猿],文档出处来自哔哩哔哩-[教程]VScode中配置Java运行环境 转载请在开头或显眼位置标注转载信息. 1.下载VScode ...

  5. JSON: JavaScript Object Notation

    JSON是JavaScript Object Notation 的缩写,是JS提供的一种数据交换格式.1) JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言 ...

  6. Java面向对象(下)作业

    首先我把题目先列到这里,可以仔细看一下题. (1)设计一个名为Geometric的几何图形的抽象类,该类包括: ①两个名为color.filled属性分别表示图形颜色和是否填充. ②一个无参的构造方法 ...

  7. C# MVCapi跨域问题

     he 'Access-Control-Allow-Origin' header contains multiple values ', *', but only one is allowed. Or ...

  8. MQ系列2:消息中间件的技术选型

    1 背景 在高并发.高消息吞吐的互联网场景中,我们经常会使用消息队列(Message Queue)作为基础设施,在服务端架构中担当消息中转.消息削峰.事务异步处理 等职能. 对于那些不需要实时响应的的 ...

  9. Identity Server 4使用OpenID Connect添加用户身份验证(三)

    一.说明 基于上一篇文章中的代码进行继续延伸,只需要小小的改动即可,不明白的地方可以先看看本人上一篇文章及源码: Identity Server 4资源拥有者密码认证控制访问API(二) GitHub ...

  10. SpringCloud微服务实战——搭建企业级开发框架(四十四):【微服务监控告警实现方式一】使用Actuator + Spring Boot Admin实现简单的微服务监控告警系统

      业务系统正常运行的稳定性十分重要,作为SpringBoot的四大核心之一,Actuator让你时刻探知SpringBoot服务运行状态信息,是保障系统正常运行必不可少的组件.   spring-b ...