网络编程的应用
目录
1.单机程序和网络程序
2.客户端与服务端
3.网络编程三要素
3.1 IP地址
3.2 port端口
4.TCP编程
5.UDP编程
1.单机程序和网络程序
-
之前编写的程序都是单机程序,所有的业务功能实现及数据存储都在一个主机上完成,我们称为单机程序
-
我们在生活中使用的绝大多数的程序(应用,软件,app),都可以基于网络,与其他主机的程序进行数据交互,又不同的主机程序完成不同的业务功能。
2.客户端与服务端
-
在编写网络程序时,一般都会至少涉及两部分内容
-
客户端 : 主动发起连接的那个程序,就称为客户端程序。
-
服务端 : 接收连接信号的程序,就称为服务端程序。
3.网络编程三要素
3.1 IP地址
-
在网络环境中,每一个主机都会有一个唯一的网络标识,我们称为ip(地址)
-
在网络中可以通过ip,找到唯一的一个主机
-
ip标识的格式规范
-
IPV4 : 32bit,平均分成4分,来表示ip , 每一份8bit , 0~255
-
IPV6 : 128bit,平均分成6分,每一份使用16进制的数字来表示
-
-
使用本机ip地址
-
在cmd中,使用ipconfig命令,查看当前主机在局域网中的ip地址
-
如果连接本机,可以使用 localhost 或 127.0.0.1
-
3.2 port端口
-
计算机上运行的每一个程序,都会拥有一个(物理)端口
-
端口的作用就是实现程序内部与外部的数据通讯的。
-
随着程序启动,系统会自动的为程序的物理端口,分配一个数字标识,称为逻辑端口
-
在编写网络程序时,我们也可以手动为程序指定逻辑端口号
-
-
逻辑端口的数字范围 0~65535 , 其中0~1023 多作为系统程序的端口
-
如果一个程序的逻辑端口号,与另一个程序的逻辑端口号相同,我们称为端口号冲突
-
只能启动一个程序。
3.3 通讯协议
使用的通讯协议有两种
-
TCP : 一种安全型协议,能够包装数据传输的安全性,也就是能够保证双方一定能收到数据
通过3次握手,确保双方的网络是联通
通过4次挥手,确保双发的连接是断开的。
-
UDP : 一种不专注于数据安全传输的协议。适合广播,音频信息的传播。
4.TCP编程
Java中提供了ServerSocket对象,可以充当服务端
public static void main(String[] args) throws IOException {//启动了一个可以充当服务端的Java程序ServerSocket server = new ServerSocket(6666);
}
Java中提供了Socket对象,可以充当客户端
public static void main(String[] args) throws IOException {//启动了一个可以充当客户端的Java程序Socket client = new Socket("192.168.28.173" , 6666);}
服务端程序启动后,需要等待客户端的连接
//等待客户端的连接,在等待过程中,当前线程会处于阻塞状态
//一旦客户端连接了,该方法会返回一个Socket对象
Socket client = server.accept();public static void main(String[] args) throws IOException {//启动了一个可以充当服务端的Java程序ServerSocket server = new ServerSocket(6666);System.out.println("======启动服务器========");//等待客户端的连接Socket link = server.accept();System.out.println("收到了【"+link.getInetAddress()+"】客户端的连接");}
-
一旦客户端和服务端产生了连接,接下来双方的交互都是基于Socket对象的。
-
两端的数据交互,最终是基于网络IO
-
Socket可以提供用于网络读写数据的IO流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
注意:与文件io读取操作不同,网络数据没有一个明确的结束。
当使用is.read()无法读取到数据时,默认不会获得-1,而是会阻塞等待
所以在使用网络io读写数据时,要提供一个结束标识,可以有两种方式
方式一:在a端使用socket.shutdownOutput(),在b端通过-1结束
方式二:在a端额外传递一个结束字符串os.write("[over]".getBytes())
在b端读取到结束字符串时就可以结束了。
5.UDP编程
-
编程语法上没有区分客户端对象和服务端对象 (逻辑上依然存储分别)
-
只要是UDP网络编程中的一个主机端,就需要创建
DatagramSocket//如果当前的主机端作为逻辑服务端,需要指定端口 //如果当前的主机端作为逻辑客户都安,是否指定端口都可以。 DatagramSocket socket = new DatagramSocket(6666); DatagramSocket socket = new DatagramSocket(); -
UDP的数据传输,需要额外的一个对象
DatagramPacket -
读写数据都需要依赖这个对象
//发数据时的packet构建,此时数组中要装有发送的内容
String str = "buka is good" ;
byte[] bs = str.getBytes();
DatagramPacket p = new DatagramPacket(bs , 0 , bs.length,InetAddress.getByName("localhost"),8888
);//收数据时的packet构建,此时数组是一个空数组
byte[] bs = new byte[1024];
DatagramPacket p = new DatagramPacket(bs , 0 , bs.length
);
-
实现数据包的发送和接收
//发送方发送数据
socket.send(p);//接收接收数据,并获得发送方的一些信息(ip + port)
socket.receive(p);
String str = new String(p.getData(), 0, p.getLength());
System.out.println("收到来自【"+p.getSocketAddress()+":"+p.getPort()+"】的消息:" + str);相关文章:
网络编程的应用
目录 1.单机程序和网络程序 2.客户端与服务端 3.网络编程三要素 3.1 IP地址 3.2 port端口 4.TCP编程 5.UDP编程 1.单机程序和网络程序 之前编写的程序都是单机程序,所有的业务功能实现及数据存储都在一个主机上完成,我们称为单机程序 我们在生活…...
佰朔资本:国内海风加速招标 船舶行业景气上行
昨日,沪指盘中一度下探失守2700点,尾盘在地产、银行等板块的带动下发力上扬,深证成指亦翻红。到收盘,沪指涨0.49%报2717.28点,深证成指涨0.11%报7992.25点,创业板指跌0.11%报1533.47点,上证50指…...
理解AAC和Opus的编码与解码流程
理解AAC和Opus的编码与解码流程及其在Android中的实现,对于音频开发非常重要。下面,我将详细解释这两种编码格式的原理、流程,并结合具体代码示例,帮助你在Android项目中合理地设计和使用它们。 一、AAC(Advanced Audio Coding) 1. AAC的原理与流程 AAC是一种有损音频压…...
设计图纸加密方法知多少?小编给你讲清楚
一、对称加密 使用对称加密算法,对设计图纸进行加密。对称加密使用相同的密钥进行加密和解密,确保只有持有正确密钥的人能够解密文件。 二、非对称加密 使用非对称加密算法,进行设计图纸的加密。非对称加密使用公钥加密、私钥解密的方式&a…...
pycv实时目标检测快速实现
使用python_cv实现目标实时检测 python 安装依赖核心代码快速使用实现结果展示enjoy python 安装依赖 opencv_python4.7.0.72 pandas1.5.3 tensorflow2.11.0 tensorflow_hub0.13.0 tensorflow_intel2.11.0 numpy1.23.5核心代码快速使用 # 使用了TensorFlow Hub和OpenCV库来实…...
记录下如何让字体在div内 自动换行 上下居中
div内样式 display: flex; // flex布局 justify-content: center; // 上下居中 align-items: center; // 左右居中 overflow-wrap: break-word; // 允许字体换行 (若行内的单词无法放下则换行) word-break: break-all; // 强制文本在任意字符间进…...
Shell篇之编写MySQL启动脚本
Shell篇之编写MySQL启动脚本 1. 脚本内容 vim mysql_ctl.sh#!/bin/bashmysql_port3306 mysql_username"root" mysql_password"molinker" mysql_conf"/opt/lanmp/mysql/etc/my.cnf" mysql_sock"/opt/lanmp/mysql/var/mysql.sock"func…...
supermap Iclient3d for cesium加载地形并夸大地形
先看效果图 这是没有夸张之前的都江堰 这是夸大五倍后的都江堰 下面展示代码 主要就是加载supermaponline的skt地形然后夸大 <template><div class"PartOneBox"><div id"cesiumContainer"></div></div> </template>…...
一文解读OLAP的工具和应用软件
OLAP(OnlineAnalyticalProcessing)是一种用于快速分析大规模、多维度数据的方法。OLAP工具和应用软件则是帮助人们进行OLAP分析的重要工具。本文将介绍几种常见的OLAP工具和应用软件,并探讨它们在数据分析中的作用。 一 OLAP工具的分类 在选…...
xml重点笔记(尚学堂 3h)
XML:可扩展标记语言 主要内容(了解即可) 1.XML介绍 2.DTD 3.XSD 4.DOM解析 6.SAX解析 学习目标 一. XML介绍 1.简介 XML(Extensible Markup Language) 可扩展标记语言,严格区分大小写 2.XML和HTML XML是用来传输和存储数据的。 XML多用在框架的配置文件…...
爬虫代理API的全面解析:让数据抓取更高效
在大数据时代,网络爬虫已经成为收集和分析数据的重要工具。然而,频繁的请求会导致IP被封禁,这时候爬虫代理API就显得尤为重要。本文将详细介绍爬虫代理API的作用、优势及如何使用,帮助你更高效地进行数据抓取。 什么是爬虫代理AP…...
PCL 点云中的植被信息提取(C++详细过程版)
目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,首发于:2024年9月18日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 一、算法原理 1、原理概述 点云具有丰富的色彩信息,可以与植被指数结合使…...
requests-html的具体使用方法有哪些?
requests-html是一个功能强大的Python库,用于发送HTTP请求和解析HTML内容。它的使用方法包括安装库、基本使用、发送带有参数的请求、图片抓取实战案例、解析网页内容、执行JavaScript代码、使用CSS选择器来查找元素、继续跟踪链接并获取内容等。 安装request…...
YOLOv9改进策略【卷积层】| AKConv: 具有任意采样形状和任意参数数量的卷积核
一、本文介绍 本文记录的是利用AKConv优化YOLOv9的目标检测网络模型。标准卷积操作的卷积运算局限于局部窗口,无法捕获其他位置的信息,且采样形状固定,无法适应不同数据集和位置中目标形状的变化。而AKConv旨在为卷积核提供任意数量的参数和…...
图神经网络池化方法
图神经网络池化方法 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 图神经网络池化方法前言一、扁平图池化二、分层图池化1.节点聚类池化2.节点丢弃池化 参考文献 前言 图池化操作根据其池化策略的差异ÿ…...
小琳AI课堂:确保大语言模型安全的八大策略--从数据隐私到用户教育
大家好,这里是小琳AI课堂。今天我们深入探讨如何保证大语言模型的安全,这可是关系到我们每个人哦!🔐 首先,我们要明白,保证大语言模型的安全,需要从多个方面入手,确保模型在技术、法…...
Python 数学建模——高斯核密度估计
文章目录 前言原理代码实例scipy 实现seaborn 实现 前言 高斯核密度估计本是一种机器学习算法,在数学建模中也可以发挥作用。本文主要讨论用它来拟合变量的概率密度,获得概率密度函数 f ( x ) f(x) f(x)。 原理 已知一个连续型随机变量 X X X 的一系列…...
Flink+Spark相关记录
FlinkSpark相关记录 FlinkSQL Flink Streaming的一些点覆写RichSource、RichSink、RichMap 1.Source自动负载均衡,CDC源端加入一个全局调控的节点监控流量流速 2.Sink并发写入 3.Map与Iterator与增量迭代等用法关于Checkpoint几个用法 1.提交Commit至目的端数据库 2…...
2023 hnust 湖科大 毕业实习 报告+实习鉴定表
2023 hnust 湖科大 毕业实习 报告实习鉴定表 岗位 IT公司机房运维 实习报告 实习鉴定表 常见疑问 hnust 湖科大 毕业实习常见问题30问(2021 年7月,V0.9)-CSDN博客时间:大四开学第三四周毕业实习23年是企业(黑马&am…...
ConflictingBeanDefinitionException | 运行SpringBoot项目时报错bean定义冲突解决方案
具体报错: Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘CommissionMapperImpl’ for bean class [com.xxx.mapper.carrier.CommissionMapperImpl] conflicts with existing, non-co…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
背包问题双雄:01 背包与完全背包详解(Java 实现)
一、背包问题概述 背包问题是动态规划领域的经典问题,其核心在于如何在有限容量的背包中选择物品,使得总价值最大化。根据物品选择规则的不同,主要分为两类: 01 背包:每件物品最多选 1 次(选或不选&#…...
Axure Rp 11 安装、汉化、授权
Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接:https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…...
生产管理系统开发:专业软件开发公司的实践与思考
生产管理系统开发的关键点 在当前制造业智能化升级的转型背景下,生产管理系统开发正逐步成为企业优化生产流程的重要技术手段。不同行业、不同规模的企业在推进生产管理数字化转型过程中,面临的挑战存在显著差异。本文结合具体实践案例,分析…...
