当前位置: 首页 > news >正文

(JAVA)-(网络编程)-初始网络编程

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

讲的通俗一点,就是以前我们写的代码是单机版的,网络编程就是联机版的。

应用场景:即时通信,网游对战,金融证券,国际贸易,邮件等等。

Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序。

讲到应用程序,首先我们来了解一下常见的软件架构。

常见的软件架构:分为BS和CS

CS架构:C表示Client,表示客户端,S表示Server,就是服务器。这种架构的软件,需要用户在本地下载客户端程序,在远程有一个服务端程序。就像我们常用的qq,需要下载客户端进行使用。

BS架构:B表示Browser,表示浏览器,S表示Server,就是服务器。用户只需要一个浏览器,用户就可以通过不同的网址,访问不同的服务器。就像我们使用的淘宝网页版,4399小游戏,都使用的BS架构。

客户端和浏览器做到的仅仅是把数据展现出来给客户看,真正核心的逻辑是在服务器中。

BS/CS架构优缺点

BS架构:

优点:开发人员无需开发客户端,只需要开发页面加服务端。用户打开浏览器就可以使用,无需下载客户端,非常的方便。缺点:画面烂,音质差,因为浏览器中要显示的所有图片,音频资源在本地是没有的,都需要从服务器中用网络传输过来。

CS架构:

用户需要下载客户端,游戏需要的音频,画面文件都在安装包中,用户下载安装后就已经在用户本地了,当用户使用时就不需要把 文件从服务器中传输给客户端,只需要告诉该显示什么东西就可以了。优点:画面精美,用户体验好。缺点:开发人员需要开发客户端,同时需要开发服务端。并且用户下载和更新的时候太麻烦了。

网络编程三要素: 

假设我们要在网络上给对方发一条消息,我们得确定对方在互联网上的地址,地址是唯一的,叫ip,我们还得知道对方是用哪个软件接收,每个软件绑定的标识也叫端口号,我们还得确定网络传输的规则,也叫协议

1.ip:ip是上网设备在网络中的地址,是唯一的标识。

ip分为IPv4 和IPv6。

IPv4:

采用32位地址长度,分为四组,每一组转成十进制,再用 . 区分。举个例子。

每一组的取值都是正数,范围是0-255。

IPv4总共只有不到43亿个IP,是不够用的,事实上也是如此,在2019年11月26日ip已经被全部分配,因此诞生了IPv6。

那我们目前是如何IPv4不够的问题的呢?

IPv4地址分为公网地址(万维网使用)和私网地址(局域网使用)

192.168.开头的就是私有地址,范围即为192.168.0.0-192.168.255.255,专门为组织机构内部使用,以此节省ip。举个例子:就像网吧,有很多很多台电脑,但是他们公用同一个公网ip

再由路由器给每台电脑分配局域网ip,这样就能达到节约ip的过程。

有一个特殊ip:127.0.0.1,也可以是localhost,是回送ip地址,也称本机ip,永远只会寻找当前所在本机,朝这个ip发送消息,在经过网卡时候就会传送回来

Ipv6:

采用了128位地址长度,分为8组。使用冒分十六进制表示法。每一组用十六进制表示,用冒号分隔开,冒号前面的0可以省略,举个例子

如果计算出的十六进制中间还有很多的0,可以使用0位压缩法

2.端口号:应用程序在设备中的唯一标识。一个端口只能被一个应用程序使用

由两个字节表示的整数,取值范围:0-65535,其中0-1023之间的端口用于一些知名的网络服务或者应用,我们自己使用1024以上的端口就可以了

3.协议:数据在网络中传输的规则,常见的协议有UDP,TCP,http,https,ftp。

UDP协议:视频音频播放对于数据精确度要求没那么高的传输可以使用

TCP协议:传输的数据不能丢失数据,例如安装包等

常用的CMD命令:

ipconfig:查看本机ip地址

ping:检查网络是否联通

http://www.lryc.cn/news/270029.html

相关文章:

  • Observer观察者模式(组件协作)
  • 数据挖掘 聚类度量
  • [Angular] 笔记 24:ngContainer vs. ngTemplate vs. ngContent
  • ❀My排序算法学习之插入排序❀
  • 【算法题】30. 串联所有单词的子串
  • SAP-FI模块 处理自动生成会计凭证增强
  • Shell脚本-bin/bash: 解释器错误: 没有那个文件或目录-完整路径执行-“/”引发的脑裂
  • React MUI(版本v5.15.2)详细使用
  • 用CSS中的动画效果做一个转动的表
  • 【linux】Linux管道的原理与使用场景
  • nvidia jetson xavier nx developer kit version emmc版重装系统
  • 命令模式-实例使用
  • 将网页变身移动应用:网址封装成App的完全指南
  • 探讨kernel32.dll文件是什么,有效解决kernel32.dll丢失
  • LOAM: Lidar Odometry and Mapping in Real-time 论文阅读
  • 如何使用Docker将.Net6项目部署到Linux服务器(三)
  • 《Spring Cloud学习笔记:分布式事务Seata》
  • MySQL:权限控制
  • 安全生产知识竞赛活动方案
  • 2023 IoTDB Summit:天谋科技 CTO 乔嘉林《IoTDB 企业版 V1.3: 时序数据管理一站式解决方案》...
  • LangChain.js 实战系列:如何统计大模型使用的 token 使用量和花费
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)EventLoop初始化
  • OpenCV(Python)基础—9小时入门版
  • SpringBoot整合Canal
  • 用 Python 提取某一个公众号下的所有文章
  • 鸿蒙4.0实战教学—基础ArkTS(简易视频播放器)
  • 4. 深入 Python 流程控制
  • 2000-2022年上市公司股票流动性指标数据/股票流动性Amihud(原始数据+计算代码+计算结果)
  • Unity 数据存储PlayerPrefs管理类
  • 一篇文章学会如何使用 NestJS 过滤器处理系统全局异常情况