【JavaEE】_网络编程基础

news2024/11/13 10:13:58

目录

1. 网络编程基础

1.1 网络编程定义

1.2 网络编程中的基本概念

1.2.1 API

1.2.2.发送端和接收端

1.2.3 请求和响应

1.2.4 客户端和服务端

2. Socket 套接字

2.1 概念

2.2 分类

3. UDP数据报套接字编程

3.1   DatagramSocket API

3.1.1 含义

3.1.2 构造方法

3.1.3 常用方法

3.2   DatagramPacket API

3.2.1 含义

3.2.2 构造方法

 3.2.3 常用方法


1. 网络编程基础

1.1 网络编程定义

网络编程是指网络上的主机,通过不同的进程,以编程的方式实现网路通信(或称为网络数据传输);

1.2 网络编程中的基本概念

1.2.1 API

1. 进行网络编程时,需要操作系统提供的API才能实现编程;

2. API可以认为是应用层与传输层之间交互的路径

3. 用于网络编程的API称为Socket API;

1.2.2.发送端和接收端

发送端:数据的发送方进程,发送端主机即网络通信中的源主机;

接收端:数据的接收方进程,接收端主机即网络通信中的目的主机;

发送端和接收端是相对的,只是一次网络数据传输产生数据流向后的概念;

1.2.3 请求和响应

一般来说获取一个网络资源,涉及到两次网络数据传输:

第1次:请求数据的发送;

第2次:响应数据的发送;

1.2.4 客户端和服务端

服务端:在常见的网络数据传输场景下,把提供服务的一方进程称为服务端,可以提供对外服务;

客户端:获取服务的一方进程称为客户端;

对于服务来说,一般是提供:

(1)客户端获取服务资源;

(2)服务器保存客户端资源;

2. Socket 套接字

2.1 概念

1. Socket套接字是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。

2. socket是操作系统中的一个概念,本质上是一种特殊的文件,Socket是将网卡抽象为文件,向socket文件中写数据,就相当于通过网卡发送数据,从socket文件读数据,就相当于通过网卡接收数据,从而实现了网络通信和文件操作的统一

2.2 分类

socket API是与传输层密切相关的,传输层提供了两个最核心的协议:UDP和TCP,

因此socket也提供了两种风格:UDP风格与TCP风格;

TCP:有连接(需要建立连接才能通信,如打电话)、可靠传输(发送方明确消息是否发送成功,如有已读标志的社交软件),面向字节流(数据传输的基本单位是字节),全双工(同上);

UDP:无连接(无需建立连接才能通信,如发短信)、不可靠传输(只负责传输,不论是否传输成功,如QQ、微信)、面向数据报(数据传输的基本单位是数据报,具有严格格式,可能是若干个字节),全双工(双向同时通信);

注:(1)在计算机中,抽象的连接是很常见的,连接本质上就是建立连接的双方各自保存对方的信息,故而对于无连接的UDP,需要程序员调用UDP的socket api时把对方的位置等信息发送过去。

(2)网络通信数据的基本单位涉及到多种说法,包括数据报(Datagram)、数据包(Packet)、数据帧(Frame)、数据段(Segment);

3. UDP数据报套接字编程

3.1   DatagramSocket API

3.1.1 含义

Datagram表示网卡的一个特殊文件,使用这个类表示一个socket对象,在操作系统中将这个socket对象当做一个文件来处理,相当于是文件描述符表上的一项:

注:① 普通文件对应的硬件设备是硬盘,socket对象对应的硬件设备是网卡

② 一个socket对象即可与另一台主机进行通信了,如需与多台主机通信,需创建多个socket对象;

在Java中就使用DatagramSocket类表示系统内部的socket文件

3.1.2 构造方法

// 创建一个socket对象     
DatagramSocket();
// 传入一个端口号,令当前的socket对象与指定的端口(简单整数)关联起来
DatagramSocket(int port);

注:① 端口号用于标识主机上的不同应用程序;

② 本质上说,并非进程与端口建立联系,而是进程中的socket对象与端口建立联系;

③ 对于第一种没有传入指定端口号的构造方法,系统会自动分配一个空闲端口;

3.1.3 常用方法

//接收
void receive(DatagramPacket p);
//发送
void send(DatagramPacket p);
//关闭
void close()

注:① 用于接收和发送的都是DatagramPacket对象

② 接收方法中的DatagramPacket对象p相当于是一个空对象,receive方法内部会对参数的这个空对象进行内容填充(数据来自网卡),从而构造出一个结果数据,参数是一个输出型参数

③类似于文件操作,使用完后需要使用close方法进行资源的释放;

3.2   DatagramPacket API

3.2.1 含义

1. DatagramPacket表示一个UDP的数据报,包含一些具体数据;

2. UDP传输是面向数据报的,每次进行传输时以UDP数据报为基本单位;

3.2.2 构造方法

// 构造buf缓冲区
DatagramPacket(byte[] buf, int length);
// 构造缓冲区与地址,SocketAddress表示IP+端口号
DatagramPacket(byte[] buf, int offset, int length, SocketAddress address);

注:① 构造DatagramPacket对象时可以指定一些具体的数据,如字节数组缓冲区,地址;

② byte[]数组:

 3.2.3 常用方法

// 从接收的数据报中获取发送端主机的IP地址或从发送的数据报中获取接收端主机的IP地址
InetAddress getAddress();
// 从接收的数据报中获取发送端主机的端口号或从发送的数据报中获取接收端主机的端口号
int getPort();
// 获取数据报中的数据
byte[] getData();

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全景摄像机行业分析:市场规模不可限量

早期的全景相机行业竞争格局较为多元。近年来随着行业技术不断成熟,市场的竞争格局由多家参与逐步向头部企业聚拢,国内企业凭借图像处理技术优势在全景相机行业中逐步抢占市场份额。 全景摄像机,是可以独立实现大范围无死角监控的摄像机。 一…

OpenVINS学习7——评估工具的简单使用

前言 OpenVINS自带评估工具,这里记录一下使用方法,我是以VIRAL数据集为例,但是目前仍然有问题,发现误差很大,我还没搞明白哪里出了问题。 工具介绍 主要参考 https://docs.openvins.com/eval-error.html https://bl…

ELK 日志分析系统

目录 一、日志管理方案 二、完整日志系统基本特征 三、ELK 简介 ELK组件: 1、ElasticSearch 2、Logstash 3、Kibana 可以添加的其它组件: 1、Filebeat 2、缓存/消息队列(redis、kafka、RabbitMQ等) 3、Fluentd 三、ELK …

作业-数组计数法

目录 数字出现次数 题目描述 输入 输出 输入复制 输出复制 求n个数中每个数出现的次数 题目描述 输入 输出 输入复制 输出复制 声音识别 题目描述 输入 输出 输入复制 输出复制 选班委 题目描述 输入 输出 输入复制 输出复制 数字出现次数 题目描述 …

解析智能酒精壁炉不完全燃烧的成因及潜在问题

解析智能酒精壁炉不完全燃烧的成因及潜在问题 智能酒精壁炉作为一种环保、高效、现代化的取暖工具,其采用酒精作为燃料进行燃烧,但在一些情况下,可能会出现酒精燃烧不完全的问题。下面将深入探讨这一现象的成因以及可能引发的问题。 成因分析…

SpringSecurity Web 权限方案

目录 一、设置登录系统的账号、密码 二、数据库查询用户名密码 三、自定义登录页面 四、基于角色或权限进行访问控制 (一)hasAuthority 方法 (二)hasAnyAuthority 方法 (三)hasRole 方法 &#xff…

Java String基础学习

目录 1、String的构造方法 2、String内存模型 3、字符串的比较 4、字符串的练习 1、用户登录系统 2、遍历字符串 3、统计字符次数 4、拼接字符串 5、字符串的反转 6、金额转换 7、手机号屏蔽 * 8、身份证信息查看 9、敏感词替换 5、StringBuilder 1、概念及练习…

Java毕业设计-基于ssm的网上求职招聘管理系统-第85期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的网上求职招聘管理系统:前端 jsp、jquery,后端 springmvc、spring、mybatis,角色分为管理员、招聘人员、用户;集成…

【GitHub项目推荐--AI杀入斗地主领域】【转载】

AlphaGo:第一个战胜围棋世界冠军的人工智能机器人。 我不会玩围棋,没办法和 AlphaGO 对局。但是我喜欢玩斗地主,有斗地主人工智能机器人吗? 有,而且还开源了。DouZero:快手团队开发的斗地主AI。别的不说&…

JAVAEE出街 网络编程(一)

网络编程 一. 网络编程二. 客户端与服务器2.1 一问一答2.2 一问多答2.3 多问一答2.4 多问多答 三. TCP与UDP的特点 一. 网络编程 网络编程本质上就是学习传输层给应用层提供的API,把数据交给传输层,通过一层层的封装将数据通过网卡传输出去。 二. 客户端…

LabVIEW电能质量监测系统

系统利用LabVIEW开发一个基于LabVIEW的电能质量监测系统,模拟并监测暂态电能质量扰动,如电压骤升、电压骤降、电压波动和暂态振荡等。系统的硬件部分包括高精度的振动传感器和信号调节设备,以及型号为NI9234的数据采集卡和高性能计算机。这些…

【JavaEE进阶】 SpringBoot配置⽂件

文章目录 🍀配置⽂件的作⽤🌴SpringBoot配置⽂件🎋配置⽂件的格式🎄properties配置⽂件🚩properties基本语法🚩读取配置⽂件🚩properties的缺点 🌳yml配置⽂件yml基本语法&#x1f6…

网络编程01 常见名词的一些解释

本文将讲解网络编程的一些常见名词以及含义 在这之前让我们先唠一唠网络的产生吧,其实网络的产生也拯救了全世界 网络发展史 网络的产生是在美苏争霸的期间,实际上双方都持有核武器,希望把对方搞垮的同时不希望自己和对方两败俱伤. 希望破坏对方的核武器发射,这就涉及到三个方面…

实现分布式锁

背景 分布式锁是一种用于协调分布式系统中多个节点之间并发访问共享资源的机制。在分布式系统中,由于存在多个节点同时访问共享资源的可能性,需要使用分布式锁来保证数据的一致性和正确性。 今天要实现的是分布式场景中的互斥类型的锁。 下面时分布…

免费使用IntelliJ IDEA的7种方式(2024 最新版)

大家好,我是小黑,今天要和大家分享的是如何免费使用 IntelliJ IDEA。我们都知道,作为一名程序员,拥有一个高效的开发工具是至关重要的。IntelliJ IDEA 无疑是市面上最受欢迎的开发工具之一。但是,获取授权的成本有时会…

MySQL 索引(下)

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL-进阶篇 🍹文章作者技术和水平很有限,如果文中出现…

leetcode下一个更大的元素---1暴力---2单调栈

1.题目&#xff1a; nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 &#xff0c;下标从 0 开始计数&#xff0c;其中nums1 是 nums2 的子集。 对于每个 0 < i < nums1.l…

STL中的map

概述 std::map 是一个模板类&#xff0c;定义在头文件 <map> 中&#xff1a; template<class Key,class T,class Compare std::less<Key>,class Allocator std::allocator<std::pair<const Key, T>> > class map;std::map 是一种有序关联容器…

考研C语言刷编程题篇之分支循环结构基础篇(一)

目录 第一题 第二题 方法一&#xff1a;要循环两次&#xff0c;一次求阶乘&#xff0c;一次求和。 注意&#xff1a;在求和时&#xff0c;如果不将sum每次求和的初始值置为1&#xff0c;那么求和就会重复。 方法二&#xff1a; 第三题 方法一&#xff1a;用数组遍历的思想…

redis-exporter grafana面板配置

一、前言 关于使用tensuns自带的grafana监控模板&#xff0c;监控redis-exporter接口会有一些数据丢失的问题&#xff0c;需要自行修改一下grafana模板的json 二、修改模板 redis grafana模板id&#xff1a;17507 主要是针对cpu使用率和内存使用率做一个说明&#xff0c;因为…