Java网络编程之IP,端口号,通信协议(UDP,TCP)

目录

  • 1.软件架构
  • 2.网络编程三要素
  • 3.IP
    • 1.IPV4
    • 2.IPV6
  • 4.端口号
  • 5.协议
    • 1.UDP协议
      • 1.单播
      • 2.组播
      • 3.广播
    • 2.TCP协议
      • 1.三次握手
      • 2.四次挥手

1.软件架构

C/S:客户端/服务器
在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。

  • 优点:画面精美,用户体验好
  • 缺点:用户需要下载更新

B/S:浏览器/服务器
只需要一个浏览器,用户通过指定网址访问对应的服务器。

  • 优点:不需要开发客户端,只需要页面+服务端,
    用户不需要下载,打开浏览器就能使用
  • 缺点:如果应用过大,用户体验收到影响

2.网络编程三要素

IP,端口号,网络协议

①IP:设备在网络中的地址,是唯一的标识
全称:Internet Protocol,是互联网协议地址,也称IP地址
是分配给上网设备的数字标签。
②端口号:应用程序在设备中唯一的标识
③协议:数据在网络传输中的规则,常见的协议有:UDP、TCP、HTTP、HTTPS、FTP

3.IP

1.IPV4

①全称:Internet Protocol version 4,互联网通信协议第四版
采用32位地址长度,分成4组
使用点分十进制表示

②IPV4的地址分类形式

  • 公网地址(万维网使用)和私有地址(局域网使用)。
  • 192.168.开头的就是私有址址,范围即为192.168.0.0–192.168.255.255,专门为组织机构内部使用,以此节省IP

③特殊ip地址:
本地回环地址127.0.0.1或者localhost,表示本机ip。

④Windows的CMD命令:
ipconfig:查看本机IP地址
ping:检查网络是否连通

2.IPV6

全称:Internet Protocolversion 6,互联网通信协议第六版
由于互联网的蓬勃发展,IP地址的需求量愈来愈大,而IPV4的模式下IP的总数是有限的
采用128位地址长度,分成8组。
使用冒分十六进制表示,特殊情况使用0位压缩表示法。

        //获取InetAddress的对象
        InetAddress address = InetAddress.getByName("127.0.0.1");

4.端口号

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

5.协议

计算机网络中,连接和通信的规则被称为网络通信协议

  • OSI参考模型:世界互联协议标准,全球通信规范,单模型过于理想化,未能在因特网上进行广泛推广。
  • TCP/IP参考模型(或TCP/IP协议): 事实上的国际标准。

在这里插入图片描述

1.UDP协议

  • 用户数据报协议(User Datagram Protocol)
  • UDP是面向无连接通信协议。
    速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据.

UDP协议发送数据:

public class Send{
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象
        DatagramSocket ds = new DatagramSocket();
        //打包数据
        String str = "你好!!";
        byte[] bytes = str.getBytes();
        InetAddress address = InetAddress.getByName("127.0.0.1");
        int port = 10006;

        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
        //发送数据
        ds.send(dp);
        //释放资源
        ds.close();
    }
}

UDP协议接收数据:

public class Receive{
    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 length = dp.getLength();
        InetAddress address = dp.getAddress();
        int port = dp.getPort();

        System.out.println("接收到数据:" + new String(data, 0, length));
        System.out.println("该数据是从" + address + "这台电脑中的" + port + "这个端口号发出的");
        //释放资源
        ds.close();
    }
}

UDP的三种通信方式:单播,组播,广播

1.单播

单播是一种UDP通信的方式,其中一台发送方的计算机向一台接收方的计算机发送数据包。
在单播通信中,发送方和接收方之间是一对一的关系,数据包只会发送到指定的接收方。
单播通信适用于点对点通信或单个目标的广播通信。

2.组播

组播是一种UDP通信的方式,其中一台发送方的计算机可以同时向多个接收方的计算机发送数据包。
在组播通信中,发送方将数据包发送到一个特定的组播IP地址,而不是单独的目标IP地址。
所有加入该组播组的接收方都可以接收到发送方发送的数据包。
组播通信适用于需要同时向多个接收方传输相同数据的场景,如视频会议、多媒体广播等。
使用组播可以有效地减少网络带宽的消耗和系统负载
组播地址: 224.0.0.0 ~ 239.255.255.255
其中224.0.0.0 ~ 224.0.0.255 为预留的组播地址

3.广播

在UDP通信中,广播是一种发送方向局域网中的所有计算机发送数据包的方式。
发送方将数据包发送到广播IP地址,该IP地址被定义为特定的网络地址( 255.255.255.255),表示发送给整个局域网内的所有计算机。
使用广播通信,发送方可以将数据包一次性发送给所有计算机,而无需指定单独的目标IP地址。
所有接收方都可以接收到发送方发送的数据包。
广播通信通常用于向局域网内的所有设备广播信息,例如在局域网内发现其他设备或进行网络设备配置。

2.TCP协议

  • 传输控制协议TCP(Transmission Control Protocol)
  • TCP协议是面向连接的通信协议。
    速度慢,没有大小限制,数据安全

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象
通信之前要保证连接已经建立
通过Socket产生IO流来进行网络通信

客户端发送数据:

public class Client {
    public static void main(String[] args) throws IOException {
        //发送数据
        //创建Socket对象
        Socket socket = new Socket("127.0.0.1", 10001);
        //从连接通道中获取输出流
        OutputStream os = socket.getOutputStream();
        //写出数据
        os.write("你好".getBytes());
        //释放资源
        os.close();
        socket.close();
    }
}

服务器接收数据:

public class Server {
    public static void main(String[] args) throws IOException {
        //接收数据
        //
        ServerSocket ss = new ServerSocket(10001);
        //监听用户的连接
        Socket socket = ss.accept();
        //从连接通道中获取输入流数据
        InputStream is = socket.getInputStream();
        //解决中文乱码
        InputStreamReader isr = new InputStreamReader(is);
        //使用缓冲流提高读取效率
        BufferedReader br = new BufferedReader(isr);
        int b;
        while ((b = br.read()) != -1) {
            System.out.println((char) b);
        }
        //释放资源
        socket.close();
        ss.close();

    }
}

1.三次握手

确保连接建立:
①客户端向服务器发出连接请求,等待服务器确认。
②服务器向客户端返回一个响应,告诉客户端收到了请求。
③客户端向服务器再次发出确认信息,连接建立。

2.四次挥手

确保连接断开,且数据处理完毕:
①客户端向服务器发出取消连接请求
②服务器向客户端返回一个响应,表示收到客户端取消请求
③服务器将最后的数据处理完毕,服务器向客户端发出确认取消信息
④客户端再次发送确认消息,连接取消

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows系统任务栏应用图标显示成空白的解决方案

背景 任务栏应用图标为空白: 原因 Windows系统为了加快系统响应速度,在安装完应用第一次显示完应用图标后,会将应用的图标放入缓存中,以后每次显示应用直接在缓存中获取,如果缓存中的图标信息发生错误,…

SSM医院预约挂号系统【源码】【最详细运行文档】

SSM医院预约挂号系统【源码】【最详细运行文档】 系统简介系统涉及系统运行系统演示源码获取 系统简介 随着医疗水平的提高,以及人们对于健康的观念越来越重视,出入医院成了一种常见的现象。而随着看病人数增多,经常出现挂号难的现象。一部分…

【微服务】springcloud集成skywalking实现全链路追踪

目录 一、前言 二、环境准备 2.1 软件环境 2.2 微服务模块 2.3 环境搭建 2.3.1 下载安装包 2.3.2 解压并启动服务 2.3.3 访问web界面 三、搭建springcloud微服务 3.1 顶层公共依赖 3.2 用户服务模块 3.2.1 准备测试使用数据库 3.2.2 添加依赖 3.2.3 添加配置文件 …

1329:【例8.2】细胞 广度优先搜索

1329:【例8.2】细胞 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 一矩形阵列由数字0 到9组成,数字1到9 代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如: 4 10 0234500067 1034560500 2045600671 00000000…

Ubuntu22.04开机左上角下划线闪烁不开机

按下CtrlAltF2,打开TTY系统,然后通过用户名和密码登录,随后使用 sudo apt --fix-broken install 根据提示排除错误信息,然后使用apt安装lightdm安装就行。 tips:当使用EasyConnect的时候,你可能参考了下面这篇文章知…

Open CASCADE学习|Draw Harness

目录 显示长方体 提供帮助信息 执行文件 记录交互式命令 使用getsourcefile可以快速查找到Tcl命令对应的C源文件 在Tcl中内置了一些变量,并赋予了一定的功能。内置变量列表如下: 退出 加载插件 在屏幕显示变量 返回绘图变量信息 视图 mu, md…

Linux程序、进程和计划任务

目录 一.程序和进程 1.程序的概念 2.进程的概念 3.线程的概念 4.单线程与多线程 5.进程的状态 二.查看进程信息相关命令: 1.ps:查看静态进程信息状态 2.top:查看动态进程排名信息 3.pgrep:查看指定进程 4.pstree&#…

大模型实战营Day2 作业

基础作业 1 使用 InternLM-Chat-7B 模型生成 300 字的小故事 2 熟悉 hugging face 下载功能,使用 huggingface_hub python 包,下载 InternLM-20B 的 config.json 文件到本地 进阶作业 1 完成浦语灵笔的图文理解及创作部署 2 完成 Lagent 工具调用 Demo…

shp文件与数据库(创建表)

前言 第三方库准备 shp文件是什么?笔者就不多做解释。后面将使用python的一些第三方库 1、sqlalchemy 2、pyshp 3、geoalchemy2 4、geopandas 这四个是主要的库,具体怎么使用可以参考相关教程,当然还有其他库,后面在介绍。…

C语言数据在内存中的存储

1.整数在内存中的存储 我们知道数据在内存中都是以2进制的形式存储的;比如int,char,double,float这些类型的数据都是以2进制的形式去存储的,那么这些数据又是如何去存入/取出的呢? 前面我们知道,整数分为有符号整数和无符号整数…

关键字、标志符、变量

1、关键字 1.1、定义 定义:被JAVA语言赋予了特殊含义,用作专门用途的字符串(或单词) 特点:全部关键字都是小写字母 上源码: 代码中定义类的关键字class,定义一个订单控制器类 ​​​​​​​…

搭建React开发环境-webpack实现

周末在家学会React前端知识,记录下来,方便备查。 webpack版本:webpack5 编译器:vscode 第一步、新建项目及初始化 1)新建项目文件夹 可命名为 my_webpack 2)初始化项目 使用命令 npm init -y,…

Android getApplication()、getApplicationContext的区别

在Android中,getApplication()和getApplicationContext()是两种获取应用程序上下文的方法,但它们有一些细微的区别。 getApplication()方法: getApplication()方法通常用于Activity或Fragment中,它返回当前Activity或Fragment所属…

深度学习:解决CNN的困境——胶囊网络

从2017年底到2018年初,整个人工智能学术研究领域谈论最多的应该就是被誉为深度学习之父Geoffrey E. Hinton 发表的论文 Dynamic Routing Between Capsules,其中介绍了全新的深度学习模型——胶囊网络(Capsule Network) 1. 普通CNN的困境 虽…

电子学会C/C++编程等级考试2023年12月(三级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:因子问题 任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。 时间限制:10000 内存限制:65536 输入 包括两个整数N、M。N不超过1,000,000。 输出 输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存…

YOLOv5改进 | 主干篇 | CSWinTransformer交叉形窗口网络改进特征融合层

一、本文介绍 本文给大家带来的改进机制是CSWin Transformer,其基于Transformer架构,创新性地引入了交叉形窗口自注意力机制,用于有效地并行处理图像的水平和垂直条带,形成交叉形窗口以提高计算效率。它还提出了局部增强位置编码(LePE),更好地处理局部位置信息,我将其…

新手练习项目 5:简易计算器(C++)

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder) 目录 一、效果图二、代码(带注释)三、说明 一、效果图 二、代码(带…

【Spring实战】26 使用Spring Security 保护 Spring Boot Admin

文章目录 1. 定义1.集成流程1)添加 Spring Boot Admin 依赖2)配置 Spring Boot Admin3)启动 Spring Boot Admin 服务4)访问 Spring Boot Admin 服务5)添加 Spring Security 依赖6)配置 Spring Security7&am…

计算机网络实验(二):Wireshark网络协议分析

一、实验名称:Wireshark网络协议分析 二、实验原理 HTTP协议分析 1.超文本传输协议(Hypertext Transfer Protocol, HTTP)是万维网(World Wide Web)的传输机制,允许浏览器通过连接Web服务器浏览网页。目…

CAN物理层协议介绍

目录 ​编辑 1. CAN协议简介 2. CAN物理层 3. 通讯节点 4. 差分信号 5. CAN协议中的差分信号 1. CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519) &#xff0…