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

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.四次挥手

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

相关文章:

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

目录 1.软件架构2.网络编程三要素3.IP1.IPV42.IPV6 4.端口号5.协议1.UDP协议1.单播2.组播3.广播 2.TCP协议1.三次握手2.四次挥手 1.软件架构 ①C/S:客户端/服务器 在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。 优点:画面精美…...

iOS和iPadOS设备启动到打开App

一、设备启动过程 启动过程每个步骤包含的组件都经 Apple 加密签名以启用完整性检查,因此只有在验证信任链后,启动才能继续; 这些组件包括引导载入程序、内核、内核扩展项和蜂窝网络基带固件; 这一安全启动链的设计旨在验证软件的…...

【INTEL(ALTERA)】如何使用 Quartus命令行导入 .qud 文件?

说明 英特尔 Quartus Prime 软件用户定义的设备文件 (.qud) 包含允许在安装 英特尔 Quartus Prime 软件之间传输设备的设备信息。 要导入 .qud 文件中定义的设备,请使用 英特尔 Quartus Prime 软件中的 quartus_cpf 命令行工具,…...

js创建服务器,以及对接口的理解和创建

// 创建服务 const app http.createServer((req, res)>{ // 设置给前端返回信息的字符编码 res.setHeader(content-type, text/html; charsetutf-8) let address req.url.split(?)[0] //首先创建一个数组,后面把它的数据放在JSON文件 let…...

【Bootstrap学习 day7】

Bootstrap按钮 按钮样式 使用.btn相关类实现 <button type"button" class"btn">基本按钮</button> <button type"button" class"btn btn-primary">主要按钮</button> <button type"button" cl…...

Zookeeper无法启动,报“Unable to load database on disk”

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 测试环境部署zookeeper的服务器磁盘满了&#xff0c;引起服务异常&#xff0c;将zookeeper进程杀掉之后&…...

【Web2D/3D】CSS3的2D/3D转换、过渡、动画(第一篇)

1. 前言 本篇开始介绍Web2D和3D相关基础知识&#xff0c;会从CSS3的2D/3D转换、过渡、动画&#xff0c;讲到Canvas 2D图形绘制&#xff0c;再到SVG&#xff0c;最后到WebGL。 坐标系&#xff1a;左上点是坐标原点(0,0)&#xff0c;x轴正方向向右&#xff0c;y轴正方向向下&…...

uView NumberBox 步进器

该组件一般用于商城购物选择物品数量的场景 注意&#xff1a;该输入框只能输入大于或等于0的整数 #平台差异说明 App&#xff08;vue&#xff09;App&#xff08;nvue&#xff09;H5小程序√√√√ #基本使用 通过v-model绑定value初始值&#xff0c;此值是双向绑定的&…...

三菱plc的点动控制循环(小灯闪烁,单控气缸循环)

以为前一段时间小编做了一个气缸定时循环的程序&#xff0c;根据程序有不足之处&#xff0c;所以小编写下这篇文章&#xff0c;将网络上的plc小灯控制进行总结&#xff01;如果对你有帮助&#xff0c;不要忘了点赞收藏&#xff01;如果有更加好的梯形图&#xff0c;欢迎评论&am…...

学习Go语言Web框架Gee总结--http.Handler(一)

学习Go语言Web框架Gee总结--http.Handler http-base/go.modhttp-base/main.gohttp-base/gee/gee.gohttp-base/gee/go.mod 网站学习来源&#xff1a;Gee 代码目录结构&#xff1a; http-base/go.mod //指定当前模块的名称为 "example" module example//指定当前模…...

react+redux+antd-mobile 之 记账本案例

1.环境搭建 //使用CRA创建项目&#xff0c;并安装必要依赖&#xff0c;包括下列基础包 //1. Redux状态管理 - reduxjs/toolkit 、 react-redux //2. 路由 - react-router-dom //3. 时间处理 - dayjs //4. class类名处理 - classnames //5. 移动端组件库 - antd-mobile //6. 请…...

Day22

Day22 一,生产者消费者模型 1.1,单个生产者单个消费者 public class Test01 {/*** 知识点&#xff1a;生产者消费者模型 - 单个生产者单个消费者* * 分析&#xff1a;* 产品类 - Phone&#xff1a;属性(brand,price)* 生产者线程 - Producer* 消费者线程 - Consumer* …...

Windows下linux 子系统 WSL2怎样使用usb串口(USBIPD-win4.0.0)

Windows下linux 子系统 WSL2怎样使用usb串口&#xff08;USBIPD-win4.0.0&#xff09; 一、widows安装二、ubuntu安装三、widows配置四、wsl配置 一、widows安装 https://github.com/dorssel/usbipd-win 直接下载最新版本的msi文件安装 二、ubuntu安装 sudo apt install lin…...

飞腾Ubantu22.04.3安装OpenNebula测试

1.概述 因OpenneBula官方镜像源只有AMD架构的镜像包不存在ARM的镜像包&#xff0c;借此用源码编译进行测试。 2.官网github地址 下载解压存放在服务器上&#xff1a; https://github.com/OpenNebula/minione/blob/master文件目录&#xff1a; 3.安装依赖包 sudo apt -y …...

gookit/color - Go语言命令行色彩使用库教程

gookit/color - Go语言命令行色彩使用库教程 1.安装2.基础颜色(16-color)3.256色彩/RGB风格 1.安装 go get github.com/gookit/color2.基础颜色(16-color) 提供通用的API方法&#xff1a;Print Printf Println Sprint Sprintf 1、例如&#xff1a; color.Yellow.Println(&q…...

python弹奏《起风了》

代码是很大的! 其实就是python用ctypes调用Win API import ctypes import threading import time winmm = ctypes.windll.winmmclass Scale:Rest = 0C8 = 108B7 = 107A7s = 106A7 = 105G7s = 104G7 = 103F7s = 102F7 = 101E7 = 100D7s = 99D7 = 98C7s = 97C7 = 96B6 = 95A6s…...

Linux---all

Linux常用命令&#xff1a; Linux常用命令-CSDN博客 Linux命令大全(超详细版)_linux命令行大全-CSDN博客Linux常用命令大全&#xff08;非常全面&#xff09;-CSDN博客Linux 命令大全&#xff08;看这一篇就足够&#xff09;_linux命令-CSDN博客Linux常用命令大全——赶紧收藏…...

前端中级算法题

前端中级算法题 反转字符串 编写一个函数&#xff0c;接受一个字符串作为输入&#xff0c;并返回反转后的字符串。 示例&#xff1a; function reverseString(str) {return str.split().reverse().join(); }reverseString(hello); // 输出: olleh 找出数组中的最大值 编写一个函…...

Ant Design Vue 编译后的网页特点是什么,怎么确认他是用的前端 Ant Design Vue 技术栈的呢?

Ant Design Vue 是一个前端 UI 框架&#xff0c;使用 Vue.js 构建。它包含了大量的预设样式和组件&#xff0c;如按钮、表单、表格等&#xff0c;可以帮助开发者快速构建出优雅且功能丰富的网页。但是&#xff0c;要确定一个编译后的网页是否使用了 Ant Design Vue&#xff0c;…...

python | PYTHON正则表达式

操作符说明实例.表示任何单个字符[]字符集&#xff0c;对单个字符给出取值范围[abc]表示a、b、c&#xff0c;[a-z]表示a到z单个字符[^ ]非字符集&#xff0c;对单个字符给出排除范围[^abc]表示非a或b或c的单个字符*前一个字符0次或无限次扩充abc* 表示ab&#xff0c;abc&#x…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...