day39-网络编程01
Java网络编程01
1.网络相关的概念
1.1网络通信和网络
- 网络通信
- 概念:两台设备之间通过网络实现数据传输
- 网络通信:将数据通过网络从一台设备传输到另一台设备
- java.net包下提供了一系列的类和接口,供程序员使用,完成网络通信
- 网络
概念:两台或多台设备通过一定物理设备连接起来构成了网络
根据网络的覆盖范围不同,对网络进行分类:
- 局域网:覆盖范围最小,仅仅覆盖一个教室或者一个机房
- 城域网:覆盖范围较大,可以覆盖一个城市
- 广域网:覆盖范围最大,可以覆盖全国甚至全球,万维网是广域网的代表
1.3ip地址和地址分类
- ip地址
- 概念:用于唯一标识网络中的每台计算机/主机
- 查看ip地址:ipconfig
- ip地址的表示形式:点分十进制 xx.xx.xx.xx
- 每一个十进制数的范围:0~255
ip地址的组成 = 网络地址+主机地址 ,比如:192.168.16.69
IPv6是互联网工程任务组设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编上一地址。
IPv6使用128位bit(16个字节)表示地址,相当于IPv4地址长度的4倍
由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不仅能够解决网络地址资源数量的问题,而且也解决了多种计入设备连入互联网的障碍
- ipv4地址分类
特殊的:127.0.0.1表示本机地址
1.4域名和端口
- 域名
- 域名的好处:为了方便记忆,解决记忆ip的困难
- 概念:将ip地址映射成域名
- 端口
- 概念:用于标识计算机上某个特定的网络程序
表示形式:以整数形式,端口范围0~65535[2个字节表示端口 0~2^16-1]
0~1024已经被占用,比如ssh 22,ftp 21,smtp 25,http 80
在网络开发中,不要使用到0~1024的端口
常见的网络程序端号:
- 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协议:传输控制协议
- 使用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
}
}
3.Socket
3.1基本介绍
套接字(Socket)开发网络应用程序被广泛采用,以至于成为事实上的标准
通信的两端都要有Socket,是两台机器间通信的端点
网络通信其实就是Socket间的通信
Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输
一般主动发起通信的应用程序属于客户端,等待通信请求的为服务端
客户端和服务器端通常情况下,是在不同主机的。但是也有可能在同一台主机上
3.2TCP编程通信
- 基本介绍
- 基于客户端--服务端的网络通信
- 底层使用的是TCP/IP协议
- 应用场景举例:客户端发送数据,服务端接收并显示控制台
- 基于Scoket的TCP编程
day39-网络编程01的更多相关文章
- 网络编程01 · 艺
Web Socket和Socket 套接字,实际就是传输层的接口.用于抽象传输层,隐藏细节.一对套接字可以进行通信. Web Socket,是基于TCP协议的.类似于,http. 为什么需要Web S ...
- python网络编程01 /C/S架构|B/S架构、网络通信原理、五层协议、七层协议简述、端口映射技术
python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述.端口映射技术 目录 python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述. ...
- 【C++】 网络编程 01
趁着计算机网络这门课布置了课程设计,学习下网络编程. 系统:Ubuntu 14.01... 1. 关于Socket(套接字) 1.1 套接字是存在于运输层和应用层间的抽象层,通过它来区分不同应用程序进 ...
- python网络编程-01
python网络编程 1.socket模块介绍 ①在网络编程中的一个基本组件就是套接字(socket),socket是两个程序之间的“信息通道”. ②套接字包括两个部分:服务器套接字.客户机套接字 ③ ...
- 从零探索Java网络编程01之 TCP/IP 与 Socket
最近完成了几项比较简单的项目, 终于是在996里偷了点闲暇时光, 想着来研究研究些啥吧? 一个普通的控制台日志映入了我的眼帘(孽缘呀): (图中使用 SpringBoot 的 log4j 来输出日志 ...
- python网络编程01
1.什么是C/S架构? 客户端/服务器架构.实现服务端软件与客户端软件基于网络的通信. 2.互联网协议是什么?分别介绍五层协议中每一层的功能? 互联网协议是指用于互联网通信的规范.分为:osi七层.t ...
- 【网络编程01】socket的基础知识-简单网络通信程序
1.什么是socket socket(套接字),简单来说是IP地址与端口(port)的组合,可以与远程主机的应用程序进行通信.通过IP地址可以确定一台主机,而通过端口则可以确定某一个应用程序.IP+端 ...
- Linux网络编程学习路线
转载自:https://blog.csdn.net/lianghe_work/article 一.网络应用层编程 1.Linux网络编程01——网络协议入门 2.Linux网络编程02——无连接和 ...
- 01网络编程(基础知识+OSI七层协议+TCP与UDP)
目录 01 网络编程 一.软件开发架构 1.1 CS架构 1.2 BS架构 二.网络理论前戏 2.1 简介 2.2 常见硬件 三.OSI七层协议(五层) 3.1 七层协议 3.2 五层协议 3.3 知 ...
随机推荐
- 30m精度土壤类型、土壤质地、土壤有机质、土壤PH、土壤氮磷钾
数据下载链接:数据下载链接 引言 全国土壤类型.质地.养分及变化等信息产品分为土壤类型数据.土壤质地数据.土壤养分数据及土壤变化数据等.该类产品是基于野外调查和实地采样,结合历史数据,建立全国土壤类 ...
- 常用类-jdk8之前的日期和API
一.System静态方法 点击查看代码 package com.Tang.StringDay01; import org.junit.Test; public class DateTimeTest { ...
- 记一次 .NET 某电厂Web系统 内存泄漏分析
一:背景 1. 讲故事 前段时间有位朋友找到我,说他的程序内存占用比较大,寻求如何解决,截图就不发了,分析下来我感觉除了程序本身的问题之外,.NET5 在内存管理方面做的也不够好,所以有必要给大家分享 ...
- APISpace 让你快速获取安徒生童话故事
<安徒生童话>是丹麦作家安徒生创作的童话集,共由166篇故事组成.该作爱憎分明,热情歌颂劳动人民.赞美他们的善良和纯洁的优秀品德:无情地揭露和批判王公贵族们的愚蠢.无能.贪婪和残暴. 接口 ...
- 【Unity基础知识】认识常用的生命周期函数(Awake、Start、Update...)
一.了解帧的概念 游戏的本质就是一个死循环 每一次循环都会处理游戏逻辑 并 更新一次游戏画面 之所以能看到画面在动 是因为 切换画面速度达到一定速度时 人眼就会认为画面是动态且流畅的 一帧就是执行了一 ...
- 4-16译码器(always,case用法)
4-16译码器学习记录 模块文件 1 module decoder_4_16( 2 a, 3 b, 4 c, 5 d, 6 out, 7 ); 8 input a; 9 input b; 10 inp ...
- CentOS7添加swap分区
买了个云主机,只有1G内存,跑爬虫经常内存不足,于是只能添加swap来缓解: 1.官方推荐的swap大小定义 2.使用dd命令在根下创建swapfile dd if=/dev/zero of=/swa ...
- Stream流的特点_只能使用一次和Stream流中的常用方法_map
Stream流的特点_只能使用一次 public class FilterStudy04 { public static void main(String[] args) { //创建一个Stream ...
- React报错之Style prop value must be an object
正文从这开始~ 总览 在React中,当我们为元素的style 属性传递字符串时,会产生"Style prop value must be an object"警告.为了解决该警告 ...
- [C#]使用 AltCover 获得代码覆盖率 - E2E Test 和 Unit Test
背景 在 CI/CD 流程当中,测试是 CI 中很重要的部分.跟开发人员关系最大的就是单元测试,单元测试编写完成之后,我们可以使用 IDE 或者 dot cover 等工具获得单元测试对于业务代码的覆 ...