JavaSE超详细笔记-网络编程篇-基于黑马

1. 什么是网络编程【理解】

  • 1.1 概念

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

1.2 常见的软件架构

  • 1.21 C/S
    • C/S全称:Client/Server(客户端/服务器)
    • 采取该架构的软件,需要在用户本地需要下载并安装客户端程序,在远程有一个服务器端程序[例如:QQ,Steam]
  • 1.22 B/S
    • B/S全称:Browser/Server (浏览器/服务器)
    • 采取该架构的软件,只需要一个浏览器,用户通过不同的网址。客户访问不同的服务器[例如:京东,淘宝]
  • 1.23 C/S,B/S的选择(优缺点)
    • 总结:CS适合专业化的办公软件,BS适合移动互联网应用
    • C/S
      • 优点
        • 画面可以做的非常精美,用户体验好
      • 缺点
        • 用户需要下载和更新的时候比较麻烦
        • 需要开发客户端,也需要开发服务端
    • B/S
      • 所有的通过服务器访问的其实都是bs架构,如网页游戏,购物商城   。
      • 优点[方便]
        • 不需要开发客户端,只需要页面+服务端
        • 用户不需要下载,打开浏览器就能用
      • 缺点
        • 如果应用过大,用户体验受到影响

2. 网络编程三要素【理解】

  • 2.1 三要素简单概况

    • IP地址

      • 设备在网络中的地址,是唯一的标识

    • 端口

      • 应用程序在设备中唯一的标识

    • 协议

      • 数据在网络中传输的规则,常见的协议由UDP、TCP、http、https、ftp。

  • 2.2 IP

    • 2.21 概念
      • 全称:Internet Protocol,是互联网协议地址,也称IP地址。是分配给上网设备的数字标签。
      • 通俗理解:上网设备在网络中的地址,是唯一的。
    • 2.22 常见的IP分类​​​​​​
      • IP地址分为两大类
        • IPv4:全称Internet Protocol version 4,互联网通信协议第四版
          • 采用32位地址长度,分为4组
            • 例如一个采用二进制形式的IP地址是“11000000 10101000 00000001 01000010”
            • 为了方便使用,IP地址经常被写成十进制的形式,中间使用符号“.”分隔不同的字节。于是,上面的IP地址可以表示为“192.168.1.66”。IP地址的这种表示法叫做“点分十进制表示法”,这显然比1和0容易记忆得多
          • 缺点:ip地址不够用,仅有不到43亿,于是诞生了IPv6
        • IPv6【了解:全称Internet Protocal version 6,互联网通信协议第六版。
          • 采用128位地址长度,分成8组
          • 这里就不举例子了,可以参考IPv4的IP地址,不过为8组,也因此有2的128次方的ip地址
          • 为了方便使用,IPv6使用冒分十六进制表示法,将上面每一组转为十六进制,并用冒号分隔。如2001:0DB8:0000:0023:0008:0800:200C:417A,因为比较长的原因,故把每一组前面的零进行省略,记录成2001:DB8:0:23:8:800:200C:417A
          • 特殊情况:如果计算出的16进制里面有很多连续的0,可以使用0位压缩表示法,如FF01:0:0:0:0:0:0:1101可以转为FF01::1101
    • 2.23 IPv4的地址分类形式
      • 主要分为公网地址(万维网使用) 和 私有地址(局域网使用)
      • 私有地址
        • 192.168.开头的就是私有地址,范围即为192.168.0.0--192.168.255.255,专门为组织机构内部使用,以此节省IP
      • 特殊IP地址
        • 127.0.0.1,也可以是localhost:是回送地址,也称本地回环地址,也称本机IP,永远只会寻找当前所在本机。
      • 常见的CMD命令
        • ipconfig:查看本机IP地址
        • ping:检查网络是否连通
    • 2.24 InetAddress的使用
      • 概况:此类表示Internet协议(IP)地址
      • 相关方法

        方法名说明
        static InetAddress getByName(String host)确定主机名称的IP地址。主机名称可以是机器名称,也可以是IP地址
        String getHostName()获取此IP地址的主机名
        String getHostAddress()返回文本显示中的IP地址字符串
public class MyInetAddress {public static void main(String[] args) throws UnknownHostException {//IP的对象,看作为电脑的对象InetAddress address = InetAddress.getByName("LAPTOP-BPH5T8C9");InetAddress address1 = InetAddress.getByName("127.0.0.1");System.out.println(address);System.out.println(address1);String name = address.getHostAddress();System.out.println(name);String ip=address.getHostAddress();System.out.println(ip);}
}
  • 2.3 端口号

    • 概念:应用程序在设备中唯一的标识
    • 端口号:
      • 由两个字节表示的整数,取值范围:0~65535
      • 其中0~1023之间的端口号用于一些知名的网络服务或者应用
      • 我们使用1024以上的端口号就可以了。
    • 注意:一个端口号只能被一个应用程序使用
  • 2.4 协议

    • 2.41 主要概念:
      • 计算机网络中,连接和通信的规则被称为网络通信协议
      • OSI参考模型:世界互联协议标准,全球通信规范,单模型过于理想化,未能在因特网上进行广泛推广
      • TCP/IP参考模型(或TCP/IP协议):事实上的国际标准
      • 我们本次主要学习UDP协议和TCP协议
    • 2.42 UDP与TCP协议的简单概括
      • UDP协议
        • UDP是面向无连接通信协议
        • 特点
          • 用户数据报协议
          • 速度快,有大小限制,一次最多发送64K,数据不安全,易丢失数据
        • 应用场景
          • 网络会议
          • 语音通话
          • 在线视频
      • TCP协议
        • TCP是面向连接的通信协议
        • 特点
          • 速度慢
          • 没有大小限制
          • 数据安全
        • 应用场景
          • 下载软件
          • 文字聊天
          • 发送邮件

3. UDP通信程序

  • 3.1 UDP通信程序步骤(发送数据)
    • 发送数据的步骤(右边是将其理解为寄东西的理解)

      • 创建发送端的Socket对象(DatagramSocket)                        找快递公司

      • 创建数据,并把数据打包                                                      打包礼物

      • 调用DatagramSocket对象的方法发送数据                           快递公司发送包裹 

      • 关闭发送端                                                                           付钱走人

  • 3.2 UDP发送方法
  • 构造方法

    方法名说明
    DatagramSocket()创建数据报套接字并将其绑定到本机地址上的任何可用端口
    DatagramPacket(byte[] buf,int len,InetAddress add,int port)创建数据包,发送长度为len的数据包到指定主机的指定端口
  • 相关方法

    方法名说明
    void send(DatagramPacket p)发送数据报包
    void close()关闭数据报套接字
    void receive(DatagramPacket p)从此套接字接受数据报包

               

    public static void main(String[] args) throws IOException {//创建DatagramSocket对象DatagramSocket ds= new DatagramSocket();//打包数据String str="数据传输中ing";byte[] bytes=str.getBytes();InetAddress address = InetAddress.getByName("127.0.0.1");int port=10086;DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);//发送数据ds.send(dp);//释放资源ds.close();}
  • 细节:
    • 绑定端口,我们以后就是通过这个端口往外发送
    • 空参:所有可用的端口随机一个进行使用
    • 有参:指定端口号进行绑定
  • 3.3 UDP通信程序步骤(接收数据)
    • 接收数据的步骤(右边是将其理解为收东西的理解)
      • 创建接收端的DatagramSocket对象                找快递公司
      • 接受打包好的数据                                           接收箱子
      • 解析数据包                                                      从箱子里面获取礼物
      • 释放资源                                                          签收走人
  • 3.4 UDP接收方法
  • 构造方法

    方法名说明
    DatagramPacket(byte[] buf, int len)创建一个DatagramPacket用于接收长度为len的数据包
  • 相关方法

    方法名说明
    byte[] getData()返回数据缓冲区
    int getLength()返回要发送的数据的长度或接收的数据的长度
    public static void main(String[] args) throws IOException {//细节://在接收的时候,一定要绑定端口//而且绑定的端口一定要跟发送的端口保持一致//创建DatagramSocket对象DatagramSocket ds=new DatagramSocket(10086);//接收数据包byte[] bytes=new byte[1024];DatagramPacket dp=new DatagramPacket(bytes,bytes.length);ds.receive(dp);//解析数据被byte[] data=dp.getData();int len = dp.getLength();InetAddress address = dp.getAddress();int port = dp.getPort();System.out.println("接收到数据"+new String(data,0,len));System.out.println("该数据是从"+address+"这台电脑中的"+port+"这个端口发出的");//释放资源ds.close();}
  • 细节:
  • 绑定端口,我们以后就是通过这个端口往外发送
  • 空参:所有可用的端口随机一个进行使用
  • 有参:指定端口号进行绑定
  • receive方法是堵塞的,会一直等发送端发送信息
3.5 UDP的三种通信方式
  • 单播:一对一个,一个电脑作为发送端,只给一台电脑发送数据
    • 上述的代码就是单播
  • 组播:一对一组,一个电脑作为发送端,可给一组电脑发送数据
    • 组播地址:224.0.0.0~239.255.255.255
      • 其中224.0.0.0~224.0.0.255 为预留的组播地址
  • 广播:一对一群,一个电脑作为发送端,可以给局域网中所有电脑发送数据
    • 广播地址:255.255.255.255
// 发送端
public class ClinetDemo {public static void main(String[] args) throws IOException {// 1. 创建发送端的Socket对象(DatagramSocket)DatagramSocket ds = new DatagramSocket();String s = "hello 组播";byte[] bytes = s.getBytes();InetAddress address = InetAddress.getByName("224.0.1.0");int port = 10000;// 2. 创建数据,并把数据打包(DatagramPacket)DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port);// 3. 调用DatagramSocket对象的方法发送数据(在单播中,这里是发给指定IP的电脑但是在组播当中,这里是发给组播地址)ds.send(dp);// 4. 释放资源ds.close();}
}
// 接收端
public class ServerDemo {public static void main(String[] args) throws IOException {// 1. 创建接收端Socket对象(MulticastSocket)MulticastSocket ms = new MulticastSocket(10000);// 2. 创建一个箱子,用于接收数据DatagramPacket dp = new DatagramPacket(new byte[1024],1024);// 3. 把当前计算机绑定一个组播地址,表示添加到这一组中.ms.joinGroup(InetAddress.getByName("224.0.1.0"));// 4. 将数据接收到箱子中ms.receive(dp);// 5. 解析数据包,并打印数据byte[] data = dp.getData();int length = dp.getLength();System.out.println(new String(data,0,length));// 6. 释放资源ms.close();}
}

运行效果

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/909445.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    时序数据库Influxdb3 core安装

    本文介绍时序数据库Influxdb3 core(开源版本)的安装和简单使用以及调优参数的介绍。 预期: 安装时序数据库Influxdb3 core 创建数据库mydb 写入数据; 使用influxdb3-cli 和 grafana2种方式查询写入的数据 前期准备: linux服务器(本文服…

    区间合并:区间合并问题

    区间合并:区间合并问题 区间合并 www.acwing.com/problem/content/805/ 按区间的左端点排序 扫描整个区间,在这过程中把可能有交点的区间合并 全包含:不做改动相交:right 后移相离:更新至下一个维护区间 import j…

    中国古代数学符号的演进 | 算筹 / 符号 / 算法

    注:本文为“中国古代数学符号”相关合辑。 图片清晰度受引文原图所限。 略作重排,未整理去重。 如有内容异常,请看原文。 这个中国古代的数学瑰宝,到底厉害在哪? 原创 朱一文 科普中国 2024 年 07 月 31 日 15:30 北…

    XMLDecoder、LDAP 注入与修复

    问题:XMLDecoder注入 针对 xml 解码器的注入攻击 反序列化用户控制的 XML ,程序没有进行验证, 会让攻击者有机会在服务器上执行恶意代 码。 例:下面代码片段中, XMLDecoder 处理不可信的输入。 ... XMLDecode…

    Unity 对象层级处理小结

    一.第一优先级Camera Culling Mask属性指定Camera显示的Layer,可以多选 Depth:Depth大的Camera显示的Layer显示在前面 二.避免使用PositionZ调整遮挡关系 在 2D 游戏中,虽然可以通过 Z 轴来调整显示顺序,但这与 2D 游戏的设计理念不符。在可以控制显示层级的多个要素或方…

    python基础举例

    最近又重新开始学python,浅浅记录下学习到的东西(也方便自己回顾看) 缩进、空格对于python很重要,一定要注意! 以下代码是基于pycharm编写的。 01 输出 #注释 # 单行注释用# ,ctrl/是单行注释的快捷键 # …

    开疆智能ModbusTCP转Canopen网关连接汇川PLC配置案例

    本案例是通过开疆智能研发的ModbusTCP转Canopen网关将汇川PLC与陀螺仪连接进行组网通讯。 准备阶段 软件:InoProShop(V1.7.3),CANopen Configuration Studio PLC:汇川AC801-0221-R0R0 网关:开疆智能ModbusTCP转Canopen网关 陀…

    Tess4J:基于 Java 的 OCR 解决方案

    在现代软件开发中,图像识别与文本提取已成为许多应用场景中的关键环节。OCR(Optical Character Recognition) 技术使得从图像中提取文字成为可能。Tess4J 是一个基于 Java 的 OCR 开发库,它封装了 Google Tesseract OCR 引擎的本地…

    Vue3 + JavaScript 父组件点击按钮触发子组件事件方法

    在 Vue 3 中&#xff0c;父组件点击按钮触发子组件事件有以下三种常用方式&#xff1a; 方法 1&#xff1a;使用 ref 直接调用子组件方法&#xff08;推荐&#xff09; vue 复制 下载 <!-- 父组件 --> <template><button click"callChildMethod"…

    超强人工智能解决方案套件InfiniSynapse:精准的业务理解、对各种数据源进行全模态联合智能分析--部署安装@Ubuntu22.04 @Docker

    InfiniSynapse 通过自研的第二代LLM-Native RAG实现了企业业务的理解&#xff0c;精准的Schema召回保证数据的准确性。提供专门为大模型优化的InfiniSQL语言&#xff0c;从而可以更加准确的生成查询语句&#xff0c;通过 InfiniSQL 引擎让人类第一次对存储在各种数据源的全模态…

    解决国内无法加载谷歌验证码(reCAPTCHA):URL 重定向配置指南

    解决国内无法加载谷歌验证码&#xff08;reCAPTCHA&#xff09;&#xff1a;URL 重定向配置指南 在搭建网站或使用某些应用时&#xff0c;经常会遇到需要调用谷歌验证&#xff08;reCAPTCHA&#xff09;API 的情况。然而&#xff0c;由于网络环境的特殊性&#xff0c;国内多数…

    【Qt】如何使用QtInstallerFramework打包Qt程序

    使用 Qt Installer Framework 可以将你的 Qt 程序打包成一个带有安装向导的安装包&#xff0c;适用于 Windows、Linux 和 macOS 平台。以下是完整的打包流程&#xff0c;以你当前开发的 ecgexport 应用为例。 &#x1f9f0; 一、准备工作 1. 安装 Qt Installer Framework 下载…

    如何编写高效的Prompt:从入门到精通

    在人工智能时代&#xff0c;特别是随着大型语言模型(LLM)如ChatGPT、Claude等的普及&#xff0c;编写高质量的Prompt(提示词)已成为一项关键技能。一个好的Prompt可以显著提高AI输出的质量和相关性&#xff0c;而一个糟糕的Prompt可能导致无用甚至误导性的结果。本文将带你深入…

    智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

    智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…

    【机械视觉】Halcon—【十三、实例找各个区域面积和中心点】

    找区域面积和中心点 *获取图像 read_image (Image, fabrik) *关闭窗口 dev_close_window () *打开窗口 dev_open_window (0, 0, 512, 512, black, WindowID) *设置输出字体&#xff0c;14号字&#xff0c;Courier字体&#xff0c;粗体 set_display_font (WindowID, 14, mono, …

    MongoDB 基础

    一、MongoDB 基础概念 1. 什么是 MongoDB MongoDB 是一个文档型数据库&#xff0c;数据以类似 JSON 的文档形式存储&#xff0c;使用 BSON 格式。设计理念是应对大数据量1、高性能和灵活性需求。数据组织方式&#xff1a;数据库→2集合→文档&#xff0c;其中集合类似于关系型…

    RNN:从记忆困境到序列建模革命

    在自然语言处理的战场上&#xff0c;一个句子中的每个单词都承载着前文的记忆。当传统神经网络面对这种时序依赖束手无策时&#xff0c;循环神经网络&#xff08;RNN&#xff09; 以独特的循环结构开启了序列建模的新纪元。它像人类阅读般记忆上下文&#xff0c;却也因记忆衰减…

    阳台光伏配套电表ADL200N-CT/D16-Wf-1

    安科瑞 华楠 18706163979 引言 在“双碳”目标推动下&#xff0c;绿色能源正逐步走进日常生活。阳台光伏作为一种新型分布式发电方式&#xff0c;凭借灵活安装、高效节能的特点&#xff0c;成为城市家庭和工商业用户的新选择。安科瑞推出的ADL200N-CT/D16-Wf-1阳光光伏电表&a…

    功能测试—软件的生命周期

    市场需求调研 可行性研究 从企业的人力储备、技术储备、资金储备等方面出发&#xff0c;论证经济效益或者社会效益能否达到预期 项目立项 需求开发 输出&#xff1a;需求规格说明书需求评审&#xff08;需求测试&#xff09;&#xff1a;测试&#xff08;测试负责人、资深测…

    PostgreSQL 日常维护

    目录 前言 基本使用 1. 登录数据库 2. 数据库操作 2.1 列出库 2.2 创建库 2.3 删除库 2.4 切换库 2.5 查看库大小 3. 数据表操作 3.1 列出表 3.2 创建表 3.3 复制表 3.4 删除表 3.5 查看表结构 4. 模式操作命令 4.1 创建模式 4.2 默认模式 4.3 删除模式 4.4…