【JavaEE】_网络编程基础

目录

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.hqwc.cn/news/419204.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言第一弹---C语言基本概念(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 C语言基本概念 1、C语言是什么?2、C语言的历史和辉煌3、编译器的选择VS20223.1、编译和链接3.2、编译器对比3.3、VS2022优缺点 4、VS项目和源文件、头…

论文阅读笔记AI篇 —— Transformer模型理论+实战 (四)

论文阅读笔记AI篇 —— Transformer模型理论实战 (四) 一、理论1.1 理论研读1.2 什么是AI Agent? 二、实战2.1 先导知识2.1.1 tensor的创建与使用2.1.2 PyTorch的模块2.1.2.1 torch.nn.Module类的继承与使用2.1.2.2 torch.nn.Linear类 2.2 Transformer代…

LSTM学习笔记

上一篇文章中我们提到,CRNN模型中用于预测特征序列上下文的模块为双向LSTM模块,本篇中就来针对该模块的结构和实现做一些理解。 Bidirectional LSTM模块结构如下图所示: 在Pytorch中,已经集成了LSTM模块,定义如下&…

Python 自动化测试:数据驱动

软件质量。这种测试,在功能测试中非常耗费人力物力,但是在自动化中,却比较好实现,只要实现了测试操作步骤,然后将多组测试数据以数据驱动的形式注入,就可以实现了。 前面文章学习了参数化,当数…

关于常见分布式组件高可用设计原理的理解和思考

文章目录 1. 数据存储场景和存储策略1.1 镜像模式-小规模数据1.2 分片模式-大规模数据 2. 数据一致性和高可用问题2.1 镜像模式如何保证数据一致性2.2 镜像模式如何保证数据高可用2.2.1 HA模式2.2.2 分布式选主模式 2.3 分片模式如何数据一致性和高可用 3. 大规模数据集群的架构…

电子学会C/C++编程等级考试2023年12月(八级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:生理周期 人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集…

『C++成长记』模板

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、泛型编程 二、函数模板 📒2.1函数模板概念 📒2.2函数…

C语言算法赛——蓝桥杯(省赛试题)

一、十四届C/C程序设计C组试题 十四届程序C组试题A#include <stdio.h> int main() {long long sum 0;int n 20230408;int i 0;// 累加从1到n的所有整数for (i 1; i < n; i){sum i;}// 输出结果printf("%lld\n", sum);return 0; }//十四届程序C组试题B…

vue2 点击按钮下载文件保存到本地(后台返回的zip压缩流)

// import ./mock/index.js; // 该项目所有请求使用mockjs模拟 去掉mock页面url下载 console.log(res, res)//token 是使页面不用去登录了if (res.file) {window.location.href Vue.prototype.$config.VUE_APP_BASE_IDSWAPI Vue.prototype.$config.VUE_APP_IDSW /service/mode…

Jetson Orin Nano安装OpenCV带cuda加速版本的全过程

安装过程 使用jetpack安装的jetson&#xff0c;自带了opencv&#xff0c;但是没有cuda加速的&#xff0c;输入opencv_version 使用jtop查看&#xff0c;可以确认自带的opencv是没用cuda的 卸载opencv&#xff0c;先查看有哪些包 pip3 list | grep opencv opencv-python 然后卸…

python系列-输入输出关系运算符算术运算符

&#x1f308;个人主页: 会编程的果子君​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 注释的语法 注释的规范 输入输出 通过控制台输出 通过控制台输入 运算符 算术运算符 关系运算符 注释的语法 python中有两种注释风格&#xff1a; 1.注释行&#xff1a;…

logstack 日志技术栈-04-opensource 开源工具 Syslog-ng+Highlight.io

5. Syslog-ng Syslog-ng 是一个开源的日志管理解决方案&#xff0c;主要用于收集和处理日志数据。它可以从多种源收集日志&#xff0c;包括系统日志、网络设备日志和第三方应用日志。 然后将日志解析、分类、重写和关联到统一格式中&#xff0c;然后将其存储或安全地传输到不同…