Java网络编程

时间:2022-02-03 01:15:21

 一. 网络编程概述

计算机网络

  • 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统

什么是网络编程?

  • 在网络通信协议下,不同计算机上运行的程序,进行的数据传输。

网络编程的应用场景:

  • 即时通信、网游对战、金融证券、国际贸易、邮件等等...
  • 不管是什么场景,都是计算机计算机之间通过网络进行数据传输。
  • Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序。

 常见的软件架构Java网络编程

  • 客户端或者浏览器,它们两个仅仅是负责把数据展示出来,展示给用户去看,在项目当中,真正的核心业务逻辑,其实都是在后面的服务器当中。

Java网络编程 1. B/S架构:

  • B/S:Browser/Server  浏览器/服务器:通过浏览器访问服务器
  • B/S架构适合移动互联网应用,可以再任何地方随时访问的系统。
  • B/S架构只需要一个浏览器,用户通过不同的网址,客户访问不同的服务器。
  • 所有通过浏览器去访问的,其实都是BS架构
  • B/S架构不需要开发客户端。
  • BS架构更新功能是不需要用户操作的,直接在服务器修改就可以了用户唯一要做的就是刷新一下浏览器,仅此而已。所以BS架构的特点主要突出一个,方便。
  • 缺点:如果应用过大,用户体验将收到影响因为服务器需要把图片、背景音乐等资源通过网络再传输给浏览器,比如说网页游戏的画质就会非常的差劲,背景音乐也没有那么精美。
  • Java网络编程

 2. C/S架构:

  • C/S:Client/Server  客户端/服务器:通过客户端访问服务器
  • C/S架构需要开发客户端
  • C/S架构在用户本地需要下载并安装客户端程序,在远程有一个服务器端程序。
  • 所有需要我们下载安装包并进行安装的,都是C/S架构,比如LOL,王者荣耀等...
  • 画面越精美,它的安装包越大因为C/S架构当中的安装包里面包含的就是游戏所用到的图片、音乐等资源,那么这些资源在安装的时候就已经在本地了服务器就不需要把图片、音乐等资源通过网络再传输给客户端了,服务器只需要客户端,现在该显示哪张图片了。
  • C/S架构的软件因为已经事先下载好了所有的资源,所以可以把画面,音乐做的非常的精美,用户的体验非常的好。
  • C/S架构既要开发客户端又要开发服务端,所以对于公司来讲C/S架构的开发、安装、部署、维护都会非常的麻烦,特别是服务器一更新,客户端也要跟着一起更新。
  • C/S架构适合定制专业化的办公类软件,如:IDEA、网游
  • Java网络编程

Java网络编程

二. 网络编程三要素

  • 所谓三要素,是指两台电脑需要传输数据,需要知道哪些东西才能传输,特别是想要给一堆电脑中的一台去发送数据
  • IP:确定对方设备(电脑等)在互联网上的地址,而这个地址是唯一的,叫做IP,IP地址是唯一的!IP地址可以唯一标识网络中的设备。要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来只指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号,也就是设备的标识号。
  • 端口号:网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程序,端口号是应用程序在设备中唯一的标识,确定对方设备上接收数据的软件,一个端口号只能被一个软件绑定使用。端口号可以唯一标识设备中的应用程序,也就是应用程序的标识。
  • 协议:确定网络传输的协议!协议就是数据在网络中传输的规则,常见的协议有UDP协议、TCP协议、http、https、ftp。通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,在计算机网络中,这些连接和通信的谷子额被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。

Java网络编程

1. IP

Java网络编程

 IPv4

  • 目前的主流方案,是给每个连接在网络上的恶主机分配一个32bit地址。按照TCP/IP规定,IP地址用二进制来表示,每个IP地址长32bit,也就是4个字节。为了方便使用,IP地址经常被写成十进制的形式。
  • 点分十进制表示法:一个字节作为一段数据,用点隔开。一个字节是8位,8位也就是一个字节的取值范围是0-255,总共256种信息。它会把8个bit分成一组,那么总共是4组,每一组再转成十进制,中间用点进行区分,每一组它的取值范围是0-255。
  • 点表示用点分隔,十进制表示最终转成十进制的表示方式。
  • IPv4最多只能有2^32次方个IP,目前已经用完了

Java网络编程

  IPv4差不多能表示43亿个IP,为了解决IP不够用的问题,所以才出现了IPv6,这样就解决了网络地址资源数量不够的问题

IPv6

  • IPv6它可以给地球上的每一粒沙子都定一个IP
  • IPv6最多有2^128次方个IP
  • IPv6还正在渐渐普及。

Java网络编程

  •  冒分十六进制表示法:把上面的每一组转换成16进制,再用冒号去分隔。Java网络编程

 IPv4的一些小细节

IPv4的地址分类形式

  • 公网地址(万维网使用)和私有地址(局域网使用),即公网IP和私有IP,私有IP也叫做局域网IP。
  • 192.168.开头的就是私有地址 / 局域网IP,范围为192.168.0.0--192.168.255.255,专门为组织机构内部使用,以此节省IP。现在就是用局域网IP去节省IP的使用。
  • 我们知道IPv4是不够的,那么如何解决IPv4不够的问题呢?
  • 利用局域网IP解决IP不够的问题。
  • 例如下图,网吧里面是有很多很多电脑的,但不是每一台电脑在连接外网的时候就有一个公网的IP,它们往往是共享同一个公网IP,再由路由器给每一台电脑分配局域网IP,这样就可以实现节约IP的效果,这就是利用局域网节省IP的原理。

Java网络编程

  •  127.0.0.1永远表示本机的IP,本机IP,也就是自己电脑的IP。
  • Java网络编程
  • 假设192.168.1.100是我电脑的IP,那么这个IP跟127.0.0.1是不一样的!
  • 如下图,假设局域网当中有6台电脑,那么这些IP都是由路由器所分配的,如果要往192.168.1.100去发送数据,此时这个数据是先发到路由器,路由器再找到你当前的IP,这样子才能实现数据的发送。
  • 但是,每一个路由器给自己的电脑分配的IP是不一样的,所以会有这样一个情况,当你换了一个地方上网,局域网IP有可能不一样。
  • Java网络编程
  •  
  • 如下图,如果要往127.0.0.1去发送数据,那么此时它是不经过路由器的,你的数据在经过网卡的时候,网卡发现你要往127.0.0.1去发送数据,那此时,它就直接把这个数据给你自己发过来了,不管你是在哪个地方上网,永远都是这样的,这就是两者的区别。
  • Java网络编程
  •  
  • 建议:以后自己写练习的时候,如果是自己给自己发数据,那么就写127.0.0.1,这就可以了。

常见的CMD命令

  • ipconfig:查看本机IP地址
  • Java网络编程
  • ping + IP / 网址:检查网络是否联通
  • ping这个命令除了能检查局域网里面的网络是否畅通,它还可以检查你的电脑跟外网是否畅通。
  • 网址的底层逻辑其实也是IP,如下图,我们可以看到百度服务器的IP:220.181.38.149
  • 在ping的后面可以跟随IP,也可以跟随网址
  • Java网络编程

InetAddress类的使用