网络编程01
1. 概念
通过网络,让两个主机之间能够进行通信,基于这样的通信完成一定的功能
只要满足进程不同即可,即使是同一个主机,只要是不同的进程,基于网络完成编程
进行网络编程时,需要操作系统提供一组API,通过这些API才能完成编程
API可以认为是应用层和传输层之间交互的路径(Socket API)
通过这套API可以完成不同主机之间,不同系统之间的网络通信
传输层,提供的网络协议,主要是 TCP 和 UDP
这两个协议的特性(工作原理)差异很大,使用这两个协议进行网络编程时,存在一定的差异
系统分别提供了两套 API
2. TCP 和 UDP 的区别
1)TCP 是有连接的,UDP 是无连接的
(连接是抽象的概念)
连接的本质就是建立连接的双方,各自保存对方的信息
两台计算机建立连接,就是双方彼此保存了对方的关键信息
TCP 想要通信,需要先建立连接;如果对方拒绝,通信无法完成
UDP 想要通信,直接发送数据即可,不需要对方的同意,UDP 自身也不会保存对方的信息
UDP 自己不知道对方的信息,但程序员要知道。UDP 本身不保存,但调用UDP SocketAPI的时候要把对方的位置传送过去
2)TCP 是可靠传输,UDP 是不可靠传输
网络上进行通信的时候,A -> B发送一个消息,是不可能一定到达的
所以对于可靠传输来说:
A -> B发送一个消息,消息是否到达B,A本身能感知到
进一步的,就可以在发送失败的时候采取一定的措施(尝试重传等)
TCP 内置了可靠传输机制
UDP 没有内置可靠传输机制
可靠传输会使机制变复杂,传输效率降低
3)TCP 是面向字节流的,UDP 是面向数据报的
此处的字节流和文件IO的字节流是一个概念
TCP 和文件操作一样,以字节为单位进行传输
UDP 是按照数据报(UDP数据报有严格的格式)为单位进行传输
网络通信数据的基本单位:
1.数据报 Datagram
2.数据包 Packet
3.数据帧 Frame
4.数据段 Segment
4)TCP 和 UDP 都是全双工的
一个信道,允许双向通信——全双工
一个信道,只能单向通信——半双工
代码中使用一个 Socket 对象,就可以发送数据也能接受数据
3.UDP 的 socket api 的使用
3.1 Socket
soketc 是操作系统的中的一个概念,本质上是一种特殊文件
把网络通信和文件操作统一了:
Socket 就属于是把“网卡”这个设备给抽象成文件了
往 Socket 文件中写数据,相当于通过网卡发送数据
往 Socket 文件中读数据,相当于是通过网卡接受数据
3.2 DatagramSocket API
DatagramSocket 是UDP Socket,用于发送和接收UDP数据报
在Java中使用这个类,来表示系统内部的 Socket 文件
1)DatagramSocket 构造方法:
| DatagramSocket() | 创建一个 UDP 数据报套接字的 Socket ,绑定到本机任意一个随机端口 (一般用于客户端) |
| DatagramSocket(int port) | 创建一个 UDP 数据报套接字的 Socket ,绑定到本机指定的端口 (一般用于服务端) |
2) DatagramSocket 方法:
| void receive(DatagramPacket p) | 从此套接字接收数据报(如果没有接收到数据报,该方法会阻塞等待) |
| void send(DatagramPacket p) | 从此套接字发送数据报包(不会阻塞等待,直接发送) |
| void close() | 关闭此数据报套接字 |
3.3 DatagramPacket AP
1)DatagramPacket 构造方法:
| DatagramPacket(byte[] buf, int length) | 构造一个 DatagramPacket 以用来接收数据报,接收的数据保存在 字节数组(第一个参数 buf )中,接收指定长度(第二个参数 length ) |
| DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) | 构造一个 DatagramPacket 以用来发送数据报,发送的数据为字 数组(第一个参数 buf )中,从 0 到指定长度(第二个参数 length ) address 指定目的主机的 IP 和端口号 |
2)DatagramPacket 方法:
| InetAddress getAddress() | 从接收的数据报中,获取发送端主机 IP地址;或从发送的数据报中,获取接收端主机 IP 地址 |
| int getPort() | 从接收的数据报中,获取发送端主机的端口号;或从发送的数据报中,获取接收端主机端口号 |
| byte[] getData() | 获取数据报中的数据 |
3.4 InetSocketAddress API
| InetSocketAddress(InetAddress addr, int port) | 创建一个 Socket 地址,包含 IP 地址和端口号 |
相关文章:
网络编程01
1. 概念 通过网络,让两个主机之间能够进行通信,基于这样的通信完成一定的功能 只要满足进程不同即可,即使是同一个主机,只要是不同的进程,基于网络完成编程 进行网络编程时,需要操作系统提供一组API&…...
el-dialog修改其样式不生效加deep也没用
场景 el-dialog标签直接写在了template下。 解决方法 在template中先写一层div,包裹住el-dialog。...
三天精通一算法之快速排序
力扣链接912. 排序数组 - 力扣(LeetCode)注意这题快排不能用递归,否则堆会爆 快速排序(Quicksort)是一种高效的排序算法,通常使用分治法来将一个列表分成较小的子列表,然后递归地排序这些子列表…...
互联网、物联网的相关标准
互联网的相关标准 网络通信协议: HTTP(Hypertext Transfer Protocol):用于在网络中传输文本、图像、音频和视频等数据的协议。它基于请求-响应模型,客户端发送请求给服务器,服务器返回响应。HTTPS&a…...
Linux题库及答案
填空题 1. 建立用户账号的命令是__useradd________。 2. 修改账号密码的命令是__passwd________。 3. 更改用户密码过期信息的命令是__chage________。 4. 创建一个新组的命令是___groupadd_______。 5. 用于在不注销的情况下切换到系统中的另一个用户的命令是___su_…...
Android 镜像模式和扩展模式区别探讨-Android14
Android 镜像模式和扩展模式区别探讨 1、区分镜像模式和扩展模式1.1 扩展屏是否有显示内容1.2 镜像模式显示条件 2、镜像模式界面 同屏显示和异屏显示探讨DisplayManagerService启动及主屏添加-Android13 Android主副屏显示-Android14 1、区分镜像模式和扩展模式 LogicalDispla…...
深度学习笔记之BERT(五)TinyBERT
深度学习笔记之TinyBERT 引言回顾:DistilBERT模型TinyBERT模型结构TinyBERT模型策略Transformer层蒸馏嵌入层蒸馏预测层蒸馏 TinyBERT模型的训练效果展示 引言 上一节介绍了 DistilBERT \text{DistilBERT} DistilBERT模型,本节将继续介绍优化性更强的知…...
【时间序列预测】基于PyTorch实现CNN_BiLSTM算法
文章目录 1. CNN与BiLSTM2. 完整代码实现3. 代码结构解读3.1 CNN Layer3.2 BiLSTM Layer3.3 Output Layer3.4 forward Layer 4. 应用场景5. 总结 本文将详细介绍如何使用Pytorch实现一个结合卷积神经网络(CNN)和双向长短期记忆网络(BiLSTM&am…...
联想Y7000 2024版本笔记本 RTX4060安装ubuntu22.04双系统及深度学习环境配置
目录 1..制作启动盘 2.Windows 磁盘分区,删除原来ubuntu的启动项 3.四个设置 4.安装ubuntu 5.ubuntu系统配置 1..制作启动盘 先下载镜像文件,注意版本对应。Rufus - 轻松创建 USB 启动盘 用rufus制作时,需要注意选择正确的分区类型和系统类型。不然安装的系统会有问题…...
VuePress学习
1.介绍 VuePress 由两部分组成:第一部分是一个极简静态网站生成器 (opens new window),它包含由 Vue 驱动的主题系统和插件 API,另一个部分是为书写技术文档而优化的默认主题,它的诞生初衷是为了支持 Vue 及其子项目的文档需求。…...
一次“okhttp访问间隔60秒,提示unexpected end of stream“的问题排查过程
一、现象 okhttp调用某个服务,如果第二次访问间隔上一次访问时间超过60s,返回错误:"unexpected end of stream"。 二、最终定位原因: 空闲连接如果超过60秒,服务端会主动关闭连接。此时客户端恰巧访问了这…...
SQL最佳实践:避免使用COUNT=0
如果你遇到类似下面的 SQL 查询: SELECT * FROM customer c WHERE 0 (SELECT COUNT(*)FROM orders oWHERE o.customer_id c.customer_id);意味着有人没有遵循 SQL 最佳实践。该语句的作用是查找没有下过订单的客户,其中子查询使用了 COUNT 函数统计客…...
PG与ORACLE的差距
首先必须是XID 64,一个在极端环境下会FREEZE的数据库无论如何都无法承担关键业务系统的重任的,我们可以通过各种配置,提升硬件的性能,通过各种IT管控措施来尽可能避免在核心系统上面临FREEZE的风险,不过并不是每个企业…...
树莓派3B+驱动开发(2)- LED驱动(传统模式)
github主页:https://github.com/snqx-lqh 本项目github地址:https://github.com/snqx-lqh/RaspberryPiDriver 本项目硬件地址:https://oshwhub.com/from_zero/shu-mei-pai-kuo-zhan-ban 欢迎交流 笔记说明 如我在驱动开发总览中说的那样&…...
超详细搭建PhpStorm+PhpStudy开发环境
刚开始接触PHP开发,搭建开发环境是第一步,网上下载PhpStorm和PhpStudy软件,怎样安装和激活就不详细说了,我们重点来看一看怎样搭配这两个开发环境。 前提:现在假设你已经安装完PhpStorm和PhpStudy软件。 我的PhpStor…...
分析比对vuex和store模式
在 Vue 中,Vuex 和 store 模式 是两个不同的概念,它们紧密相关,主要用于管理应用的状态。下面我会详细介绍这两个概念,并通过例子帮助你更好地理解。 1. Vuex 是什么? Vuex 是 Vue.js 的一个状态管理库,用…...
C# 网络编程--基础核心内容
在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践。 C#网络编程的主要内容包括以下几个方面: : 上图引用大佬的图,大家也关注一下,有技术有品质,有国有家,情…...
【C++游戏程序】easyX图形库还原游戏《贪吃蛇大作战》(三)
承接上一篇文章:【C游戏程序】easyX图形库还原游戏《贪吃蛇大作战》(二),我们这次来补充一些游戏细节,以及增加吃食物加长角色长度等设定玩法,也是本游戏的最后一篇文章。 一.玩家边界检测 首先是用来检测…...
uni-app H5端使用注意事项 【跨端开发系列】
🔗 uniapp 跨端开发系列文章:🎀🎀🎀 uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…...
SpringBoot中的@Configuration注解
在Spring Boot中,Configuration注解扮演着非常重要的角色,它是Spring框架中用于定义配置类的一个核心注解。以下是Configuration注解的主要作用: 定义配置类: 使用Configuration注解的类表示这是一个配置类,Spring容器…...
量子噪声对机器学习模型的影响与优化策略
1. 量子噪声与机器学习模型的复杂博弈在量子计算领域,噪声问题就像一位不请自来的客人,总是干扰着我们的计算过程。特别是在量子机器学习(QML)中,噪声的影响更为微妙且复杂。我最近使用Qiskit平台进行了一系列实验,试图揭示不同类…...
YOLOv5锚框(anchor)自适应计算与实战调优指南
1. 为什么需要自定义YOLOv5锚框参数 第一次用YOLOv5跑自己的数据集时,我发现模型死活训不出好效果。明明用的是官方预训练权重,标注数据也检查过没问题,但AP值就是上不去。后来把预测结果可视化出来才发现问题——那些长条形物体(…...
构建现代化图片编辑器的Vue与Fabric.js实践指南
构建现代化图片编辑器的Vue与Fabric.js实践指南 【免费下载链接】vue-fabric-editor 快图设计-基于fabric.js和Vue的开源图片编辑器,可自定义字体、素材、设计模板。fabric.js and Vue based image editor, can customize fonts, materials, design templates. 项…...
用1DCNN预测股票价格:一份基于TensorFlow/Keras的保姆级实战代码解析
用1DCNN预测股票价格:从数据预处理到模型优化的全流程实战 金融时间序列预测一直是量化分析领域的核心挑战之一。传统的统计方法如ARIMA在处理非线性关系时表现有限,而深度学习中的一维卷积神经网络(1DCNN)因其捕捉局部特征的能力,在股价预测…...
别再只盯着原理图了!用Python+OpenCV动手模拟激光三角测距(斜射/直射对比)
用PythonOpenCV模拟激光三角测距:斜射与直射的实战对比 激光三角测距技术听起来高大上,但真正理解它的精髓往往需要跳出公式推导的泥潭。作为一名长期在工业检测领域摸爬滚打的技术人员,我发现用代码模拟物理过程是最有效的学习方式。本文将…...
保姆级教程:用易语言和大漠插件给游戏做字库,实现自动化文字识别(附模块源码)
零基础实战:易语言与大漠插件游戏字库制作全指南 游戏自动化开发中,文字识别是绕不开的核心技术。想象一下,当你的程序能自动读取任务提示、NPC对话或物品名称时,整个自动化流程就拥有了"眼睛"。本文将彻底拆解大漠插件…...
保姆级教程:手把手教你下载、解压与解析ILSVRC2015 VID数据集(附Python脚本)
计算机视觉实战:ILSVRC2015 VID数据集处理全流程指南 当你第一次打开ILSVRC2015 VID数据集时,可能会被它的规模吓到——超过100万张图像、数千个视频序列和复杂的XML标注结构。这份指南将带你从零开始,像处理日常项目一样轻松驾驭这个庞然大…...
魔兽争霸3终极优化指南:如何让经典游戏在现代系统上完美运行
魔兽争霸3终极优化指南:如何让经典游戏在现代系统上完美运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为魔兽争霸3的兼容…...
MySQL 如何正确实现“随机采样”
在开发英语学习或社交应用时,随机展示单词或消息是一个高频需求。然而,看似简单的“随机”逻辑,如果实现方式不当,会随着数据量的增长演变为系统瓶颈 。 1. 性能陷阱:order by rand() 最直观的写法是 select word from…...
我的世界手机版烦人的村民整合包下载基岩国际版2026最新版
在《我的世界》庞大的模组生态中,烦人的村民整合包(Annoying Villagers) 凭借颠覆性的 NPC 设定、硬核战斗机制与深度剧情互动,成为 Java 版最具影响力的高难度生存整合包之一。由 Pugilist_Steve 主导开发,最新 6.0 版…...
