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

网络编程的应用

目录

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&#xff08;OnlineAnalyticalProcessing&#xff09;是一种用于快速分析大规模、多维度数据的方法。OLAP工具和应用软件则是帮助人们进行OLAP分析的重要工具。本文将介绍几种常见的OLAP工具和应用软件&#xff0c;并探讨它们在数据分析中的作用。 一 OLAP工具的分类 在选…...

xml重点笔记(尚学堂 3h)

XML:可扩展标记语言 主要内容(了解即可) 1.XML介绍 2.DTD 3.XSD 4.DOM解析 6.SAX解析 学习目标 一. XML介绍 1.简介 XML(Extensible Markup Language) 可扩展标记语言&#xff0c;严格区分大小写 2.XML和HTML XML是用来传输和存储数据的。 XML多用在框架的配置文件…...

爬虫代理API的全面解析:让数据抓取更高效

在大数据时代&#xff0c;网络爬虫已经成为收集和分析数据的重要工具。然而&#xff0c;频繁的请求会导致IP被封禁&#xff0c;这时候爬虫代理API就显得尤为重要。本文将详细介绍爬虫代理API的作用、优势及如何使用&#xff0c;帮助你更高效地进行数据抓取。 什么是爬虫代理AP…...

PCL 点云中的植被信息提取(C++详细过程版)

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,首发于:2024年9月18日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 一、算法原理 1、原理概述 点云具有丰富的色彩信息,可以与植被指数结合使…...

requests-html的具体使用方法有哪些?

‌requests-html是一个功能强大的Python库&#xff0c;用于发送HTTP请求和解析HTML内容。它的使用方法包括安装库、基本使用、发送带有参数的请求、图片抓取实战案例、解析网页内容、执行JavaScript代码、使用CSS选择器来查找元素、继续跟踪链接并获取内容等。‌ ‌安装request…...

YOLOv9改进策略【卷积层】| AKConv: 具有任意采样形状和任意参数数量的卷积核

一、本文介绍 本文记录的是利用AKConv优化YOLOv9的目标检测网络模型。标准卷积操作的卷积运算局限于局部窗口&#xff0c;无法捕获其他位置的信息&#xff0c;且采样形状固定&#xff0c;无法适应不同数据集和位置中目标形状的变化。而AKConv旨在为卷积核提供任意数量的参数和…...

图神经网络池化方法

图神经网络池化方法 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 图神经网络池化方法前言一、扁平图池化二、分层图池化1.节点聚类池化2.节点丢弃池化 参考文献 前言 图池化操作根据其池化策略的差异&#xff…...

小琳AI课堂:确保大语言模型安全的八大策略--从数据隐私到用户教育

大家好&#xff0c;这里是小琳AI课堂。今天我们深入探讨如何保证大语言模型的安全&#xff0c;这可是关系到我们每个人哦&#xff01;&#x1f510; 首先&#xff0c;我们要明白&#xff0c;保证大语言模型的安全&#xff0c;需要从多个方面入手&#xff0c;确保模型在技术、法…...

Python 数学建模——高斯核密度估计

文章目录 前言原理代码实例scipy 实现seaborn 实现 前言 高斯核密度估计本是一种机器学习算法&#xff0c;在数学建模中也可以发挥作用。本文主要讨论用它来拟合变量的概率密度&#xff0c;获得概率密度函数 f ( x ) f(x) f(x)。 原理 已知一个连续型随机变量 X X X 的一系列…...

Flink+Spark相关记录

FlinkSpark相关记录 FlinkSQL Flink Streaming的一些点覆写RichSource、RichSink、RichMap 1.Source自动负载均衡&#xff0c;CDC源端加入一个全局调控的节点监控流量流速 2.Sink并发写入 3.Map与Iterator与增量迭代等用法关于Checkpoint几个用法 1.提交Commit至目的端数据库 2…...

2023 hnust 湖科大 毕业实习 报告+实习鉴定表

2023 hnust 湖科大 毕业实习 报告实习鉴定表 岗位 IT公司机房运维 实习报告 实习鉴定表 常见疑问 hnust 湖科大 毕业实习常见问题30问&#xff08;2021 年7月&#xff0c;V0.9&#xff09;-CSDN博客时间&#xff1a;大四开学第三四周毕业实习23年是企业&#xff08;黑马&am…...

ConflictingBeanDefinitionException | 运行SpringBoot项目时报错bean定义冲突解决方案

具体报错&#xff1a; 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…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...